Android WebView 踩坑日记,字体怎么突然变小了???

Android WebView 踩坑日记,字体怎么突然变小了???

背景

最近,端内在做 webView 统一的时候,个性签名中的 WebView 替换为 CustomWebView 之后,发现字体突然变小。

一开始不知道是什么原因,通过二分法查找最近的提交,排查之后,发现是 SignatureWebView 的继承关系从 WebView 修改为 CustomWebView。revert 之后就正常了。

于是,我问自己,为什么会这样呢?

原因分析

我们知道,WebViewSetting 里面是可以修改 WebView 的一些默认设置的。

阅读官方文档,发现 setLoadWithOverviewMode,setUseWideViewPort 这两个方法看起来跟 WebView 缩放相关。

于是尝试把 setLoadWithOverviewMode 改为 false,很神奇,竟然正常了。

setLoadWithOverviewMode

这个方法的作用,简单来说,就是是否根据屏幕宽度自适应

Sets whether the WebView loads pages in overview mode, that is, zooms out the content to fit on screen by width. This setting is taken into account when the content width is greater than the width of the WebView control, for example, when getUseWideViewPort() is enabled. The default is false.

developer.android.com/reference/a…

这个问题解决之后,我心中又有这样的疑问,为什么别的地方没有问题,只有个性签名这里的 WebView 有问题

带着这个疑问,我再次去浏览代码,发现个性签名里面 Webview 加载的网页,是自己拼接的 html。debug 之后,发现网页代码大概是这样的

<span style="word-wrap:break-word;font-family:system-ui;font-size:16px;color:#888888;">Https://www.baidu.com</span>

可以看到里面字体的单位是 px,跟 Android 的 dp px 有点像,是不是没作屏幕适配?

搜索发现 Web 网页的代码适配单位是 rem,有点类似于 dp。

Web 网页在适配分辨率的时候,通常会设置 viewport 属性

于是我尝试在代码里面加了这样的代码,发现 SignatureWebView 显示个性签名又正常了。

parsedHtml += "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover\">";

Web 网页字体的适配规则,这里就不班门弄斧了,有兴趣的可以自行搜索。

端内其他地方排查

我们知道,加载自定义 html,通常需要调用 loadDataWithBaseURL 方法,查看端内调用的地方,发现其他都是正常的。只有这个奇葩 SignatureWebView ,自己拼接的 html 没有加 viewport 属性,进行适配

总结

  1. 如果 html 是自己拼接的,并且像素是 px,不要设置 WebViewSetting 的 setLoadWithOverviewModesetUseWideViewPort(默认属性是 false),否则字体可能显示不正常,偏大或者偏小
  2. 如果 html 是自己拼接的,并且像素是 px,当我们设置 WebViewSetting 的 setLoadWithOverviewMode ,setUseWideViewPort 为 true(根据屏幕自适应),那么我们需要设置 html 的 viewport 规则,否则可能显示不正常
  3. html 如果是自己拼接的,需要注意适配规则,像个人签名这种,用 webView 承载自己拼接的 html ,防止踩坑

WebView 字体常见的其他坑

手机设置字体大小导致h5页面在webview中变形

出现这个问题的原因是

  1. 默认浏览器中的内容是不受系统字体大小设置控制的,至少我遇到的几台手机都是这样的情况。
  2. 某些机型 WebView 字体的大小是受手机系统字体大小控制的

问题解决方案来自这篇文章:blog.csdn.net/FungLeo/art…

这个通常有两种解决方案。

Web js 网页解决方案

  1. 一般,我们动态计算好html的font-size之后,我们就啥都不干了,就走了。
  2. 但是,我们现在知道了,我们设置的大小不一定是真实的大小,所以,我们需要在设置完字体大小之后,再去重新获取一下html的font-size,看看实际的这个值,和我们设置的是不是一样。
  3. 如果不一样,就要根据比例再设置一次。
function htmlFontSize(){
    var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
    var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
    var width = w > h ? h : w;
    width = width > 720 ? 720 : width
    var fz = ~~(width*100000/36)/10000
    document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz +"px";
    var realfz = ~~(+window.getComputedStyle(document.getElementsByTagName("html")[0]).fontSize.replace('px','')*10000)/10000
    if (fz !== realfz) {
        document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz * (fz / realfz) +"px";
    }
}

客户端 WebView 禁止缩放

Android WebView 是可以通过 WebSettings 禁止网页字体缩放的,可以通过 setTextZoom 方法解决

webview.getSettings().setTextZoom(100)

可以禁止缩放,按照百分百显示。

小结

这篇文章主要是记录 bug 的一个解决过程,技术含量不高,但是有一定的参考价值。尤其是 bug 的解决思路。

  1. 线上突然出现问题,一直找不出问题,尝试一下二分法,逐步缩小范围。
  2. 有时候,我们找到解决方案,却不一定知道原因是什么,这时候,可以多问一下自己,背后的原因是什么?在排查的过程中,我们会逐渐培养自己的一套问题解决思路,听起来很虚,但是确实存在的。
  3. 知道原因之后,我们可以继续再进一步排查一下,项目中其他模块是不是也存在这样的问题。
  4. 以后要怎么规避之类问题?写个 wiki 或者博客记录一下

推荐阅读

这几篇文章从 0 到 1,讲解 DAG 有向无环图是怎么实现的,以及在 Android 启动优化的应用。

推荐理由:启动优化动不动就聊拓扑结构,这篇文章从数据结构到算法到设计都给大家说清楚了,开源项目也有非常强的借鉴意义。

Android 启动优化(一) - 有向无环图

Android 启动优化(二) - 拓扑排序的原理以及解题思路

Android 启动优化(三)- AnchorTask 开源了

Android 启动优化(四)- AnchorTask 是怎么实现的

Android 启动优化(五)- AnchorTask 1.0.0 版本正式发布了

Android 启动优化(六)- 深入理解布局优化

找到我

我是站在巨人的肩膀上成长起来的,同样,我也希望成为你们的巨人。觉得不错的话可以关注一下我的微信公众号程序员徐公,在此感谢各位大佬们。主要分享

1.Android 开发相关知识:包括 java,kotlin, Android 技术。
2.面试相关分享:包括常见的面试题目,大厂面试真题、面试经验套路分享。
3.算法相关学习笔记:比如怎么学习算法,leetcode 常见算法总结,跟大家一起学习算法。
4.时事点评:主要是关于互联网的,比如小米高管屌丝事件,拼多多女员工猝死事件等

希望我们可以成为朋友,成长路上的忠实伙伴!

Android WebView 踩坑日记,字体怎么突然变小了???

原文链接:https://www.cnblogs.com/gdutxiaoxu/p/17141457.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android WebView 踩坑日记,字体怎么突然变小了??? - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • Android模拟器调试串口

    一、安装虚拟串口软件 虚拟串口软件推荐 Virtual Serial Port Driver 官网 和 Virtual Serial Port Kit 官网 都可以免费试用15天。 这里以Virtual Serial Port Kit为例,打开安装好的Virtual Serial Port Kit,点击菜单栏的新增图标 然后选择两个端口点确定即可 1.1 测…

    Android 2023年4月17日
    00
  • Android Banner – ViewPager 02

    Android Banner – ViewPager 02 现在来给viewpager实现的banenr加上自动轮播 自动轮播的原理,使用handler的延迟消息来实现。 自动轮播实现如下内容 开始轮播&停止轮播 可配置轮播时长、轮播方向 通过自定义属性来配置轮播时长,方向 感知生命周期,可见时开始轮播,不可见时停止轮播 感知手指触摸,触摸按下时停止…

    Android 2023年4月17日
    00
  • android开发Android Studio Electric Eel版本开始支持手机投屏啦

    android开发Android Studio Electric Eel可以手机投屏啦 在Android Studio Electric Eel版本之前,我们需要进行手机投屏,一般使用Vysor等软件,这还是付费的哦,而且还不是很稳定 Android Studio Electric Eel版本开始有投屏功能了,使用起来就像模拟器一样,投屏的位置就是在模拟器窗…

    Android 2023年4月17日
    00
  • Android报”SQLiteException”如何解决?

    下面是关于Android报”SQLiteException”异常的原因和解决办法的详细讲解。 异常原因 在进行Android应用程序开发中,我们可能会遇到SQLite数据库相关的操作,例如创建表格、插入数据、查询数据等操作。当我们在应用程序中进行这些操作时,可能会遇到”SQLiteException”异常,其原因可能如下: SQL语法错误:在进行数据库操作时…

    Android 2023年4月3日
    00
  • 关于移动开发平台,你想知道的这些事

    近年来,移动开发平台如雨后春笋般蓬勃发展。这诸多的移动开发平台常常令人面临选择恐惧。今天就来同大家一块盘点一下,看看这些移动开发平台都有什么特点与优势,希望为有需要的开发者提供一定的参考。   需要特别说明的是,这里提到的移动开发平台与 Flutter、React Native 等移动开发框架还有一定的区别,更多是指为开发者提供从开发、测试、发布和运营整个生…

    Android 2023年4月18日
    00
  • 直播回顾 | 点击率提升400%,Ta是怎么做到的?

    Discovery第18期直播已于3月30日圆满结束,本期直播邀请天眼查做客直播间,从天眼查与华为Push用户增长服务合作历程切入,聚焦用户增长,分享提升应用活跃度和渠道ROI的经验与见解。一起来回顾本期精彩内容吧! 【精彩对话】 Q1: 天眼查为什么选择华为Push用户增长服务实现拉新、促活和转化? 刘树维:天眼查作为国内领先的商业查询平台,我们发现用户对…

    Android 2023年4月17日
    00
  • Android中设置Button为透明

    设置Button为透明状态,有两种最简单的方式: 1. 在layout.xml文件中的Button节点下,设置Button的Alpha属性,因为该属性在0~255范围内取值,0表示完全透明,255表示完全不透明; 但是此方法有一个缺点,当设置为0后,Button上的文字也看不见了。所以在项目中使用了第二种方法。 2. 在layout.xml文件中的Butto…

    Android 2023年4月17日
    00
  • 扫一扫,原来这么简单

    二维码识别技术已广泛应用在移动支付、实用工具、电商购物、社交通讯等场景。然而,在实际生活中,二维码容易遇到距离远、暗光、强光、污损、模糊和大角度倾斜等复杂场景,导致识别困难,扫码体验差。华为HMS Core 统一扫码服务(Scan Kit)为开发者们的APP带来一站式扫码解决方案,并且拥有高识别率和快速识别等特点。 距离太远、码图过小? 在停车场扫码缴费、上…

    Android 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部