最近公司有海外项目需求,因为有多语言适配,布局就需要LTR以及RTL布局方式,特此记录一下简单适配过程。
- 开发语言 kotlin
- 布局使用xml结合 viewbinding
- 最低 Api Level 21
RTL
- RTL 是 Right-to-left 的缩写,其意为阅读和书写的习惯,是从右向左延伸的。再对比一下我国人自身的使用习惯,都是 LTR 的,也就是从左向右。
- RTL 可以简单理解是 LTR 的镜像,当需要适配 RTL 的时候,除了翻译语言本身,还需要做到的就是 UI 布局,从中轴上镜像反转。
- RTL 不符合我们国人的使用习惯,但是全球范围内依然有一部分人保持着 RTL 的习惯,比较常见的就是阿拉伯语、希伯来语等。
- Android 4.2 开始,增加了对 RTL 镜像布局完全原生的支持。我这里使用最低Android5.0,所以完全支持。
- 在这些系统版本上,只要用户系统语言切换到「RTL 系语言」,首先系统 UI 会直接左右镜像切换,此时如果你的 App 支持 RTL 镜像布局时,也会自动切换布局方向。
支持
-
标签下添加 android:supportsRtl=“true” 即可。
-
布局的编写需要注意
1. xxxLeft/xxxRight "替换"为 xxxStart/xxxEnd 2. 使用约束布局 Left/Right 都需要变换为 Start/End 3. 如果不想某些控件镜像,使用Left/Right即可,使用后不会被镜像
-
一些细节
-
适配 RTL 的过程中,无法避免的就是有一些属性必须要设置,比如常用的TextView
android:gravity="start" android:textDirection="locale" 将这些属性在 style.xml 中全局为 TextView 设置 <style name="TextViewStyle.Alignment" parent="@android:style/Widget.TextView"> <item name="android:gravity">start</item> <item name="android:textDirection">locale</item> </style>
-
RTL 的资源适配
res/ mipmap-xhdpi/ b.png mipmap-ldrtl-xhdpi/ b.png layout/ main.xml // 默认布局 layout-ar/ main.xml // 阿拉伯语布局 layout-ldrtl/ main.xml // RTL 布局
-
小结
按照以上操作完成后,对照UI仔细检查每个页面以及资源,根据需求调整即可。