对于网页的自适应设置,通常情况,我们加载后超出屏幕宽度的一般是 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