最近公司有海外项目需求,因为有多语言适配,布局就需要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
小结
按照以上操作完成后,对照UI仔细检查每个页面以及资源,根据需求调整即可。
|