前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决 android 高低版本 webView 里内容 自适应屏幕的终极方法

解决 android 高低版本 webView 里内容 自适应屏幕的终极方法

作者头像
林冠宏-指尖下的幽灵
发布2018-01-03 10:43:02
1.6K0
发布2018-01-03 10:43:02
举报

转载请声明出处(https://cloud.tencent.com/developer/user/1148436/activities)

先说下我的情况,大家可以对号入座(嫌无聊请跳过)

      我的项目要求是这样的,先从数据库里面拿出来html标签,因为加载到移动端的网页内容是用户在网页编辑好了之后提交到服务器的,即网页内容是 b/s 交互,我在网页前段编辑器里面设置了只保存编辑的 html 标签,即是没有头部和后面的,形式是:

<html>

   <body>

        只保存这里的标签到数据库

   </body>

</html>

     移动端有两个activity,这时候是 c/s 交互了,页面一负责加载前置数据,例如一张封面图之类的,然后用户点击进入webView主体,我上面说了,我的目标html标签是保存到db的,所以我在第一个页面的时候就把db里面的html下载保存到内存了,String即可,用户点击时,跳转传递。看到这里,相信你知道我是加载到webView的了,没错,就是组合,再load。注意了,我这里并不是直接加在一个链接,不是 webView.loadUrl() 是组合好 html 后再使用 loadDataWithBaseUrl。

说下标签不同的影响(很重要,因为某些方法对某些表情有用)

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

代码语言:javascript
复制
setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);setting.setUseWideViewPort(true);setting.setLoadWithOverviewMode(true);我先说明,这三个设置不一定有效,android 4.4 后就很可能没效,为什么是很可能?你都不敢确定?上面说过,和标签及其设置有关系。   如果出现了 table 这种标签,即 table 适配屏幕,很可能css都失效,怎么办?,我就是遇到了它,所以有了这篇文章。三,三种解决方法(重点)。   针对我的自己情况,自己组合html显示的。   法一:      使用 Css 适配,它比上面的三种 setting 有效,对img 和video 绝壁有效,我给出个例子:
代码语言:javascript
复制
1 "<style>"+
2  "img{" +
3         "max-width:100%;" +
4          "height:auto}" +
5  
6  "video{"+
7             "max-width:100%;"+
8              "height:auto}"+
9   "</style>" +
代码语言:javascript
复制
 法二:使用三种setting设置: 
代码语言:javascript
复制
        setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);        setting.setUseWideViewPort(true);        setting.setLoadWithOverviewMode(true);        这种方法的失败可能性很大,但是,也可以一试   法三:使用javaScript脚本,暂时给它定义成功率是 100%(因为我用它没失效过)        我这里给一个例子,例如我上面说到的 table。
代码语言:javascript
复制
"<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>"+

看到这里,你很可能会说,这和 css 有什么区别?区别可大了,我使用 css 改变table的失败了,使用它成功了。

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

四,打完收工

      有问题请留言。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档