必须调用websettings.settextzoom(100)才能禁用android webview系统字体缩放,且需在loadurl前执行;微信环境还需js调用weixinjsbridge.setfontsizecallback并监听menu:setfont事件。

Android WebView中text-size-adjust失效怎么办
在Android WebView里直接写text-size-adjust: none基本没用——WebView(尤其4.4+)会忽略这个CSS属性,因为它底层走的是setTextZoom()控制路径,CSS层完全不可见。你看到页面被放大,不是浏览器“自动调整”,而是系统字体设置被WebView原样继承并强制应用。
必须用WebSettings.setTextZoom(100)锁定缩放
这是唯一能真正切断系统字体干扰的手段,但要注意几个硬性条件:
-
setTextZoom(100)只在Android 4.0+生效;4.0以下得降级用setTextSize(WebSettings.TextSize.NORMAL) - 必须在
webView.loadUrl()之前调用,否则已加载的HTML不会重排 - 一旦设死,用户双指缩放文本功能同步失效,无法恢复(除非重新setZoom)
- 若页面本身用了rem且根字号依赖屏幕宽度,
setTextZoom(100)不会影响rem计算,但会阻止系统层叠加缩放导致的双重放大
微信环境要额外调WeixinJSBridge
微信内置WebView绕过了标准WebSettings,它用自己的桥接机制控制字体。光设setTextZoom没用,必须在JS里主动拦截:
- 页面
最开头执行:WeixinJSBridge.invoke('setFontSizeCallback', {fontSize: 0})(注意:0 = 系统默认,不是最小) - 同时监听
menu:setfont事件,防止用户点微信菜单里的“调整字体”再次触发放大 - 这段JS不能等
DOMContentLoaded,否则首屏已错乱——建议放在<script></script>标签内紧贴起始位置
text-size-adjust: 100%仍有价值,但仅限普通浏览器
对非WebView的Android Chrome、Firefox等,text-size-adjust: 100%是有效开关。它不禁止用户缩放,只关掉浏览器“智能判断后自动放大标题/缩小页脚”的行为:
- 必须写在
或上,作用于后代文本才生效 -
* { text-size-adjust: none }会彻底锁死所有缩放,无障碍风险高,生产环境慎用 - 搭配
font-size: 16px或html { font-size: 16px }使用,可避免Android系统对
真正麻烦的从来不是“怎么写CSS”,而是WebView和微信各自维护一套字体控制逻辑,且互不兼容。一个页面要同时跑在原生WebView、微信、QQ、钉钉里,就得把setTextZoom、setFontSizeCallback、text-size-adjust三层全配齐,缺一不可。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











