Android中的WebView的使用
前言
WebView在Android中的使用频率还挺高的,经常用来加载一个html网页,使用webview来和js互动可以大大的增加开发我们的效率。不过这个控件在使用的过程还需要注意一些问题,以下是本鸟的使用经历,哪里有说的不对,请路过的大佬不吝赐教。菜鸟在此先行谢过了。
权限
加载网络中的链接肯定得需要联网权限咯,在你的AndroidManifest中添加下面的权限:
定义
我使用webview的时候,直接就在布局文件中定义了,只是简单的定义了一个没有滚动条铺满整个空间的webview
java代码中使用
要想使用布局中定义的控件,findViewById是少不了的,然后就是webview的一些常用配置:
webView = findViewById(R.id.common_webview);WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);//支持js交互,可以点击网页中按钮链接 settings.setJavaScriptCanOpenWindowsAutomatically(true);//支持js可以打开新的页面 settings.setSupportZoom(true);//是否可以缩放,默认true settings.setBuiltInZoomControls(true);//是否显示缩放按钮,默认false settings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式 settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题 settings.setAppCacheEnabled(false);//是否使用缓存 settings.setDomStorageEnabled(true);//DOM Storage
写了这么多的配置重点中的重点!!!!loadUrl这个方法一定别忘记调用了[笑哭],因为这让你的webview显示的内容。这应该就正常加载你的网页了,不过这样默认打开你手机自带的浏览器。不过这种用户体验感极差,所以我们用以下方法来解决这个问题
webView.setWebViewClient(new WebViewClient() { //覆盖shouldOverrideUrlLoading 方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //默认是打开系统自带的浏览器,重写这个方法之后就不会打开系统的浏览器了 view.loadUrl(url); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed();//解决webview 加载https 出现没内容 } });
重写第一个方法之后,就不会打开系统的浏览器了,这时你会看见重写第二个方法,因为webview加载的链接可能是http或者是https,这两个的区别就是后者有点严重坑爹。。。,之前一直是加载的http,没有啥问题,昨天没注意后台给的html,加载就是出现白板没内容,搞了半天才看到是https。。。,网搜了一圈,大致是因为默认会查看证书的安全,重写那个方法之后就会忽略这个问题了。
后退问题
你的界面可会是上面标题栏,标题栏左侧还会有一个返回键,下面是一个webview,如果你点击html里面的链接内容,加载出新的页面,你点击返回键就直接finish掉这个fragment或者activity,这个时候你会突然想到,安卓还带一个back键呢!!!天空飘来五个字,这都不是事,上代码解决问题
ivBack.setOnClickListener(new View.OnClickListener() {//标题栏返回键 @Override public void onClick(View view) { if (webView.canGoBack()){ webView.goBack(); }else { finish(); } } });@Override public void onBackPressed() {//手机物理返回键 if (weekView.canGoBack()){ weekView.goBack(); }else { finish(); } }
结束语
这就是一些常用的webview设置,本鸟经历的webview不多,后续会更新这篇文章,如果哪里有什么不对的地方还请大家指教,互相学习嘛,嘿嘿嘿。。。
更多相关文章
- Android中使用SurfaceView的方法
- Android加载图片防止OOM
- Android新的网络请求框架volley源码解释及示例
- Android设计模式系列--模板方法模式
- android ndk生成第三方库的so方法(ndk-build,Application.mk,Andro
- Android中WebView加载本地Html,与JavaScript与Android方法相互传
- Android的JNI总结
- Android中Fragment碎片解析
- Android(安卓)AndroidProgressLayout:加载页面遮挡耗时操作任务页