解决Android中WebView视频无法播放的问题

原文:http://www.itxiechao.com/330.html

解决Android中WebView LayoutAlgorithm.SINGLE_COLUMN导致视频无法播放的问题
相信做Android开发的朋友都知道使用WebView 中的webview.loadUrl(url); 或webview.loadDataWithBaseURL(“about:blank”, htmlContent, “text/html”, “utf-8″, null); 来显示html内容,但如果html内容中包含图片,有可能会导致网页显示异常,会出现左右滚动条,或者图片太小或太大,反正不好看,这时候大家可能会使用:

1 2 // 设置加载进来的页面自适应手机屏幕 webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
这段代码在大部分手机上面都有效,但后来我发现在小米3上面还是会出现左右滚动条,图片太长导致的,后研究了好久发现是因为加载进来的html代码中的解决Android中WebView视频无法播放的问题
文章图片
标签中含有width和height属性,导致在小米3上面显示异常,也就是说之前写的LayoutAlgorithm.SINGLE_COLUMN没起作用,后来我又加入了这段代码:
1 2 3 4 5 6 // 替换标签中含有width和height属性为width="100%" height="" try { htmlContent = htmlContent.replaceAll( "width=\"([^\"]+)\"" , "width=\"100%\"" ); htmlContent = htmlContent.replaceAll( "height=\"([^\"]+)\"" , "" ); } catch (Exception e) { }
这样在小米3手机上面也可以让加载进来的页面自适应手机屏幕了。
但是最近又有新的需求,需要在html中嵌入视频,发现在我们的APP中无法播放视频,在ios中却可以,所以我马上判断是我Android的代码有问题了,然后马上去检查代码,经过一个上午的奋斗,终于发现问题出在之前那段代码上面:
1 2 // 设置加载进来的页面自适应手机屏幕 webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
原来这段代码会改变视频播放显示的尺寸,导致视频无法播放,去掉这段代码我又怕不能让界面适应手机屏幕,后来终于让我找到了一个完美解决LayoutAlgorithm.SINGLE_COLUMN和视频冲突的方法,关键代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 private void initWebViewData() { webview.getSettings().setJavaScriptEnabled(true); // 开启Javascript支持 webview.setScrollBarStyle(0); // 滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 webview.getSettings().setLoadsImagesAutomatically(true); // 设置可以自动加载图片 webview.getSettings().setAppCacheEnabled(true); // 应用可以有缓存 webview.getSettings().setDomStorageEnabled(true); // 设置可以使用localStorage webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 优先使用缓存 webview.getSettings().setAppCacheMaxSize(10 * 1024 * 1024); // 缓存最多可以有10M webview.getSettings().setAllowFileAccess(true); // 可以读取文件缓存(manifest生效) webview.getSettings().setPluginState(PluginState.ON); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 加速WebView加载的方法 webview.getSettings().setRenderPriority(RenderPriority.HIGH); // 提高渲染的优先级 //判断html中是否包含视频【解决Android中WebView视频无法播放的问题】
"dxseo-related-posts" style= "clear:both; " > "margin:20px 0 10px; padding:0; font-weight:bold; font-size:14px; " >相关文章
    class = "dxseo-rl-items" >
  • "list-style-type: disc; " class = "dxseo-rl-item" > "http://www.itxiechao.com/510.html" target= "_blank" title= "解决使用Mybatis时mysql报“too many connections”错误" >解决使用Mybatis时mysql报“too many connections”错误
  • "list-style-type: disc; " class = "dxseo-rl-item" > "http://www.itxiechao.com/276.html" target= "_blank" title= "快速删除文件夹中svn版本信息" >快速删除文件夹中svn版本信息
  • "list-style-type: disc; " class = "dxseo-rl-item" > "http://www.itxiechao.com/154.html" target= "_blank" title= "CodeIgniter笔记" >CodeIgniter笔记
  • "list-style-type: disc; " class = "dxseo-rl-item" > "http://www.itxiechao.com/130.html" target= "_blank" title= "java解压zip或rar压缩文件并解决中文乱码!" >java解压zip或rar压缩文件并解决中文乱码!
标签:Android


    推荐阅读