WebView自适应适配

对于网页的自适应设置,通常情况,我们加载后超出屏幕宽度的一般是 img 或者 video 标签或者文字,这类标签可以使用css 或者网上盛行的三个设置做到适配:

setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
setting.setUseWideViewPort(true);
setting.setLoadWithOverviewMode(true);

但是这个方法不一定有效,android 4.4 后因为内核发生变动,这个时候一般情况下,需要设置图片等标签设置高度为auto可以解决问题。

img style='max-width:90%;height:auto;

如无法修改代码html代码,可在本地替换的方式,可以引用 jsoup

Documentdoc_Dis = Jsoup.parse(content);
Elementsele_Img = doc_Dis.getElementsByTag("img");
if (ele_Img.size() != 0) {
    for (Elemente_Img:ele_Img) {
        e_Img.attr("width", "100%");
        //一定要设置 auto 不要控制其高度,让其自己跟随宽度变化情况调整
        e_Img.attr("height", "auto");
    }
}
StringnewHtmlContent = doc_Dis.toString();
mWebview.loadDataWithBaseURL(null, newHtmlContent, "text/html", "utf-8", null);

但如果出现了 table 这种标签,即 table 适配屏幕,很可能css都失效,也无法适配,坑了我好久。。。。这时,这需要table高度为auto

可使用js脚本来替换页面内容,达到自适应效果。

"<script type=\"text/javascript\">"
     "var tables = document.getElementsByTagName('table');" + // 找到table标签
       "for(var i = 0; i<tables.length; i++){" +  // 逐个改变
              "tables[i].style.width = '100%';" +  // 宽度改为100%
               "tables[i].style.height = 'auto';" +
         "}" +
  "</script>"+

说明一下: 上面使用 js 脚步适配,请写到 内容加载之后,即是 <body> 内容 <写后面></body>,为什么呢?有基础的人都知道,html 是解析性语言,从上到下,你要先加载好 html 再使用 js 改变,除非js 包在函数里面。

参考:
http://www.cnblogs.com/linguanh/p/4927353.html
http://www.jianshu.com/p/b1f3222c859b

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 4,997评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,222评论 4 61
  • Hive提供了很多的函数,可以在命令行下show functions罗列所有的函数,你会发现这些函数名与mysql...
    日月明心阅读 8,251评论 0 5
  • 屏幕方向设置 manifest可以设置activity的screenOrientation,可选值为: unSpe...
    令狐蛋挞阅读 3,647评论 0 0