看完文章大概需要10分钟~
目录
1.背景和介绍
2.什么是RTL
3.效率工具
4.细节和技巧
5.实践分析
6.开发踩坑点
7.Android语言切换流程
一、背景和介绍
海外市场的需求越来越大,国际化的发展,相对其它语言的适配,阿拉伯等中东国家RTL比较特殊,需要改变布局和使用习惯。
我们常用习惯是LTR(Left-to-Right)阅读和使用习惯从左往右,RTL(Right-To-Left)正好相反,阅读和使用习惯是从右往左,常见国家地区有阿拉伯语、希伯来语等。
二、什么是RTL
基本实现
Android对Rtl的支持。
Android4.1开始在textview和editView增加了双向文本的优先支持。
Android4.2开始增加了对RTL镜像的完全支持。
app如何支持RTL
分2步
第一步:系统切换RTL语言,还需你app支持RTL镜像布局,在AndroidMainifest.xml文件<applictiion>标签下配置元素android:supportsRtl=“true”(需确认是否默认支持)。
第二步:调整UI布局属性,从left/right到start/end切换。如果是4.2以下需保留left/right和start/end两者
三、效率工具
自动化、工具化
AS重构
Refactor->Add RTL Support Where Possible
会自动将项目中所有的left/right属性替换为start/end属性,如果需要适配4.2以下设备,勾选Relpace Left/Right Properties with Start/End Properties选项。
替换后尽量每个页面看看效果,有时候需要一些微调工作,例如使用了<include>标签,其中用到的方向属性不会被替换。
四、细节和技巧
1.全局样式,批量修改属性。
textview和editview需要设置以下属性
android:textAlignment="viewStart"
android:gravity="start"
android:textDirection="locale"
将这些属性在style.xml全局设置
<style name="text_rtl_style">
<item name="android:textAlignment">viewStart</item>
<item name="android:textDirection">locale</item>
<item name="android:gravity">start</item>
</style>
2.RTL资源适配
图片资源创建drawable-ldrtl目录,将翻转的图片资源放在目录下,可以限定dpi,例如drawable-ldrtl-xhdpi。
布局文件创建layout-idrtl目录,可以增加语言限定,例如阿拉伯语layout-ar/。
动画文件?
3.代码判断是否支持RTL。
有些自定义控件需要代码动态调整的,可以通过Configuration的locale判断当前环境。
public boolean isRtl() {
return TextUtilsCompat.getLayoutDirectionFromLocale(
getContext().getResources().getConfiguration().locale) == ViewCompat.LAYOUT_DIRECTION_RTL;
}
4.不是所有控件支持RTL
如ViewPager,在 Github 就有对应的开源库 RtlViewPager(https://github.com/diego-gomez-olvera/RtlViewPager) 可供使用,其原理是对数据倒序重排。
五、实践分析
如何估期
适配RTL需要做哪些事?这个任务需要多少时间能够完成?需要哪些人配合,哪些任务是可以并行的?
要精准化RTL工作量不容易,取决于产品经理对细节的要求,app的特性。
在适配之前可以先快速看下效果,需三步。
1.设置Android:supportsRtl=“true”,让App支持RTL。
2.AS自动转换布局属性,支持RTL布局效果。
3.打开开发者选项中的强制RTL布局开关,或者切换语言到阿拉伯。
此时可以快速看下整体效果,有哪些部分需要调整的,需要产品提出要求、设计师评估UI和交互、翻译提供语言翻译。
适配RTL任务分这几步:
1.App支持RTL,AS自动转换。
2.图片、布局、动画、string等适配
适配RTL建议
1.从基础类开始,将界面设置为从右到左。
2.分模块进行适配。
3.复杂模块,可以放在layout-ldrtl包下,单独一个布局适配阿拉伯语。
六、开发踩坑点
1.服务端下发字符串适配。
2.String.format注意设置语言,如果是数字会使用阿拉伯符号数字
3.部分api如Rect、padding手动适配
4.字符串拼接
5.布局线性、帧布局改为相对、约束
6.textview会默认选择第一个字符设置语言
7.textview内容居中
8.动画适配
9.数组反转
10.渐变色翻转
其它
\u200f转义符
有时英语和阿拉伯混用会出现,英语从左往右,阿拉伯从右往左。这种情况可以字符串首尾加上\u200f转义符强制让字符串从右往左显示。
autoMirrored属性
drawable的xml文件右autoMirrored属性,设置为true,可以让drawable在RTL布局下反转。