同样line-height下ios和Android显示不一致的问题
问题:
当我们设置文字垂直居中时,一般会设置line-heigh于box的高度一致,这是我们很难看出有什么差别。当我们设置icon和文字同时上下居中时,同样的line-height,会发现ios和Android显示不一致,Android会显得偏高
原因:
这个问题通过css是无法解决的,即使解决了也是一种通过微调来实现的hack方法,因为文字在content-area内部渲染的时候已经偏移了,而css的居中方案都是控制的整个content-area的居中。导致这个问题的本质原因可能是Android在排版计算的时候参考了primyfont字体的相关属性(即HHead Ascent、HHead Descent等),而primyfont的查找是看font-family
里哪个字体在fonts.xml里第一个匹配上,而原生Android下中文字体是没有family name的,导致匹配上的始终不是中文字体,所以解决这个问题就要在font-family
里显式申明中文,或者通过什么方法保证所有字符都fallback到中文字体。
解决方法
1.针对Android 7.0+设备:
1.1
上设置 lang 属性:
,同时
font-family
不指定英文,如 font-family: sans-serif
。这个方法是利用了浏览器的字体fallback
机制,让英文也使用中文字体来展示,blink
早期的内核在fallback
机制上存在问题,Android 7.0+
才能ok,早期的内核下会导致英文fallback
到Noto Sans Myanmar
,这个字体非常丑。
1.2 在需要的标签上设置lang
<div lang="zh-cmn-Hans">div>
2.针对MIUI 8.0+设备:
设置 font-family: miui
。这个方案就是显式申明中文的方案,MIUI
在8.0+上内置了小米兰亭,同时在fonts.xml
里给这个字体指定了family name:miui
,所以我们可以直接设置。
3.奇数导致(不一定有效)
因为行高或字体大小是奇数导致的
参考:
作者:周祺
链接:https://www.zhihu.com/question/39516424/answer/274374076
更多相关文章
- eBook 功能模块二之设置模块Android
- Android(安卓)屏幕适配(修改系统字体大小、显示大小、修改分辨率
- android多国语言文件夹汇总
- android 获取字体宽高
- 有关谷歌Android和Java历史的一课
- 杂乱之android的字体相关类Typeface
- Android(安卓)Activity中启动另一应用程序的方法,无需类名
- Android(安卓)中的 values XML
- android资源配置文件