实战WebView加载js界面并播放视频遇到的一些小问题java.lang.IllegalStateException

直接上代码:

webView加载js界面

String contentHtml = "<html lang=\"en\">\n" +
        "                      <head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n" +
        "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n" +
        "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n" +
        "<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n" +
        "<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n" +
        "<meta name=\"format-detection\" content=\"telephone=no\">" +
        "<link rel=\"stylesheet\" href=\"file:///android_asset/css.css\" type=\"text/css\" /> " +
        "<script src =  \"file:///android_asset/news_js.js\"></script>                  </head><body id=\"activity-detail\" class=\"zh_CN reward_skin_primary mm_appmsg  appmsg_skin_default \">\n" +
        "<div id=\"js_article\" class=\"rich_media\">\n" +
        "<div class=\"rich_media_inner\">\n" +
        "<div id=\"page-content\" class=\"rich_media_area_primary\">\n" +
        "                                <div class=\"rich_media_content \" lang== \"en\" id=\"js_content\">\n" +
        homeListBean.informationContent+
        "</div>\n" +
        "</div>\n" +
        "</div>\n" +
        "</div>\n" +
        "</body>\t</html>";
//支持javascript
webView.getSettings().setJavaScriptEnabled(true);
// 设置可以支持缩放
webView.getSettings().setSupportZoom(true);
// 设置出现缩放工具
webView.getSettings().setBuiltInZoomControls(true);
//扩大比例的缩放
webView.getSettings().setUseWideViewPort(true);
//自适应屏幕
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setLoadWithOverviewMode(true);
//设置格式
webView.getSettings().setDefaultTextEncodingName("utf-8");
//设置不硬件加速
webView.setLayerType(View.LAYER_TYPE_NONE, null);
webView.loadDataWithBaseURL(null,contentHtml, "text/html", "utf-8",null);

其中
"<link rel=\"stylesheet\" href=\"file:///android_asset/css.css\" type=\"text/css\" /> " +
"<script src =  \"file:///android_asset/news_js.js\"></script> 

是表示加载js的样式文件放在assets目录下:


webView加载视频的时候有很多设备只有声音,没有画面,这个时候在androidmanifest.xml中添加应用程序application中设置硬件渲染为true,在Oncreate函数中启用硬件渲染即可。

1、androidmanifest.xml文件设置如下属性:
android:hardwareAccelerated="true"

2、OnCreate中添加:
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

做网页视频只有声音没画面,一般这样可以解决。并不是所有机型都可以,也有特例,比较少。


java.lang.IllegalStateException: Unable to create layer for WebView, size 1080x18459 exceeds max size 8192

这个错误是由于webview在scrollview里设置成了wrap_content,导致webview不确定大小,而且webview启动了硬件加速,由于硬件加速是有个最小的缓存区域的,最终导致超过了缓存范围。
解决方法:
webView.setLayerType(View.LAYER_TYPE_NONE, null);
关闭硬件加速即可,也不能使用软件加速

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页