在一些项目中会碰到文字和图片无法居中,即使采用flex或绝对定位(top:-50%, tranform:translateY(50%)仍然无法解决。
这个问题的根本原因在于Android对大部分的非sans-serif字体支持不友好,如Helvetica,导致文字在组件内部(如span,label)就不居中。
文字在组件内部都不居中了,自然在外面怎么处理都是无法对齐了。
三个解决办法:规避或局部修改字体
- 都使用图片代替。字体图片虽然无法居中对齐,但幸运的是只有很少地方会碰到。(有人会问把图片改为字体图标呢?没试过,本质是svg,应该不能)
- 简化设计,涉及对齐的都规避掉。如去掉图片、文字容器有上下边框则一定要去掉
- 局部修改字体(不完美,只能作最终方案),对文字的直接容器新增二个属性, lang 和 font-family
<span lang="zh-cmn-Hans" style="font-family: -apply-system-font, sans-serif">文字</span>
但是sans-serif和helvetica字体的颜色是不一样的,所以可以增加一个透明度opacity为0.8会比较接近helvetica了,故最终的方案是
<span lang="zh-cmn-Hans" style="font-family: -apply-system-font, sans-serif; opacity:0.8">文字</span>