WebView加载网页,图片不显示
直接上效果图:
在Android studio中加载URL链接的时候,有些图片可以显示,有些显示不出来;
考虑可以有以下原因:
- android webview 从Lollipop(5.0)开始webview默认不允许混合模式,https当中不能加载http资源,而开发的时候可能使用的是https的链接,但是链接中的图片可能是http的,所以需要设置开启。
解决方法:在webview中加入如下代码
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
mWebView.getSettings().setBlockNetworkImage(false);
参考文章:引用链接
还有一篇可以参考的:参考
- 还有一种就是在manifest中添加网络权限
一定要记得添加网络权限,添加网络权限,添加网络权限;
<uses-permission android:name="android.permission.INTERNET"/>
如果添加上面的几行代码没用作用,看向这!!!
if (Build.VERSION.SDK_INT > 21) {
webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setBlockNetworkImage(false);
webview.setHorizontalScrollBarEnabled(false);
webview.getSettings().setLoadWithOverviewMode(true);
webview.loadUrl("https://www.baidu.com/");//显示远程网页
把这几行添加完一般就可以解决图片不加载的情况了;
运行效果如下:
补充:
1、思考一:
一般Android studio用webview加载网址的时候;点击部分页面链接;会直接用手机自带的网页打开;而不是直接在应用里进行加载;
解决方法:这时我们就应该对链接拦截,直接在应用内部进行加载,而不是用手机外部进行加载。
代码如下:
webview.setWebViewClient(new WebViewClient() {//拦截不使用浏览器拦截
@Override
public void onPageFinished(WebView view, String url) {
}
});
2、思考二:
返回/退出逻辑:
一定要添加退出的逻辑,在webview里点击进去后,有上一级的时候就可以进行返回,如果没有上一级时,则app不退出。下面代码 exit();方法中
@Override//设置回退
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); //goBack()表示返回WebView的上一页面
return true;
}else {
exit();
}
return false;
}
private long exitTime = 0;
public void exit() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次,退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
}
附上坤坤的一句话:冲鸭!!!