Android — RTL适配笔记

💡 原文中文,约12500字,阅读约需30分钟。
📝

内容提要

在海外发行App,多言语适配是必不可少的。AndroidManifest中增加配置android:supportsRtl来开启RTL支持。控件适配时,将left或right改为start或end。文本适配可使用String.format()转换为对应言语的数字文本,使用BidiFormatter.unicodeWrap()进行混合言语文本格式化。自定义View适配需对RTL进行处理。

🔎

延伸解读

RTL适配不只是翻译

文章指出,在阿拉伯语或希伯来语区域,用户阅读习惯是从右到左,仅翻译文本不够,还需对布局进行RTL适配。这提醒开发者,海外发行App时,多语言适配应包含界面布局的镜像处理,否则用户体验会大打折扣。

控件适配:用start/end替代left/right

从Android 4.2开始,大部分系统控件已自动适配RTL。开发者只需在布局文件中将left或right属性改为start或end,例如layout_marginStart、layout_constraintStart_toStartOf等。这样在RTL语言下,控件位置会自动镜像,减少手动调整。

文本适配:数字与混合语言处理

对于纯数字文本,可使用String.format()转换为对应语言的数字格式。对于混合语言文本(如地址中包含英文和数字),使用BidiFormatter.unicodeWrap()进行格式化,能避免在RTL环境下文本显示顺序错乱。文章通过对比示例展示了未使用和使用BidiFormatter的效果差异。

自定义View需手动处理RTL

自定义View在onLayout或onDraw中绘制内容时,需自行判断并适配RTL。文章以ExpandableFlowLayout为例,通过TextUtilsCompat.getLayoutDirectionFromLocale判断当前布局方向,并在onLayout中根据isRtl变量调整子View的布局起始位置和方向,确保在RTL模式下从右向左排列。

❓

Q&A

如何在AndroidManifest中开启RTL支持?

在AndroidManifest中增加配置android:supportsRtl="true"。

在布局文件中如何适配RTL?

将布局文件中使用的left或right属性改为start或end。

如何处理数字文本的RTL适配?

可以使用String.format()方法转换为对应语言的数字文本。

混合语言文本如何进行格式化?

可以通过BidiFormatter.unicodeWrap()方法进行格式化。

自定义View在RTL适配中需要注意什么?

自定义View需要在onLayout或onDraw方法中处理RTL适配。

示例代码中如何实现ExpandableFlowLayout的RTL适配?

在ExpandableFlowLayout中,根据isRtl变量调整View的布局位置。

🏷️

标签

➡️

继续阅读