前言
WebView在Android中的使用频率还挺高的,经常用来加载一个html网页,使用webview来和js互动可以大大的增加开发我们的效率。不过这个控件在使用的过程还需要注意一些问题,以下是本鸟的使用经历,哪里有说的不对,请路过的大佬不吝赐教。菜鸟在此先行谢过了。
权限
加载网络中的链接肯定得需要联网权限咯,在你的AndroidManifest中添加下面的权限:
<uses-permission android:name="android.permission.INTERNET"/>
定义
我使用webview的时候,直接就在布局文件中定义了,只是简单的定义了一个没有滚动条铺满整个空间的webview
<WebView
android:id="@+id/common_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
</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不多,后续会更新这篇文章,如果哪里有什么不对的地方还请大家指教,互相学习嘛,嘿嘿嘿。。。