Android阿拉伯语UI适配问题汇总
Android阿拉伯语UI适配问题汇总
Sensi Sun
- RTL和LTR
LTR 是 Left-to-right(从左向右) 的缩写。(常用)
RTL 是 Right-to-left(从右向左) 的缩写。其意为人们书写阅读习惯是从右向左,朝左继续的。常见的RTL语言有阿拉伯语,希伯来语等。
从 Android 4.2 即 SDK 17 开始,提供了全面的本地布局支持,允许镜像布局,可以同时支持 RTL 和 LTR。
- 阿拉伯语适配方法
- AndroidManifest.xml文件配置
在 AndroidManifest.xml 文件中 application 节点添加支持从右到左布局方式代码。
<application
...
android:supportsRtl="true" >
...
<licatio
- 切换语言
- AS一键适配
AS 支持一键适配 RTL,主要是在原来 Layout 中设置 Left 和 Right 属性的补充添加 Start 和 End 属性。Start 属性在 LTR 中对应 Left,在 RTL 中对应 Right,在API 17开始支持,为了兼容低版本,需要同时有 Left 和 Start。
Refactor > Add RTL Support Where Possible...
添加Start 和 End 属性有两种方法:
方法一:手动在原来 Layout 中设置 Left 和 Right 属性的补充添加 Start 和 End 属性。
风险分析:暂无。
方法二:导入第三方插件。
名称 |
描述 |
自动修复布局文件中未添加RTL支持的标签 |
与 AS 插件的比较:
- 性能更好。在处理大批量文件修改时,用AS工具会出现卡顿;
- 支持padding标签的补齐。
- 风险:可能会出现部分布局文件未添加RTL支持的标签。
【配置】
buildscript {
repositories {
// ...
maven { url "https://jitpack.io" }
}
dependencies {
classpath 'com.github.znyang:gradle-android-rtl:0.0.4'
}
}
apply plugin: 'com.zen.plugin.rtl'
rtl {
from = fileTree("${project.projectDir}/src/main/res/layout/")
// into = "${project.buildDir}/outputs/rtl/res/layout"
}
【输出】
gradle androidRtl
需要修复的layout文件会生成在rtl.into的目录下,可以在确认后覆盖到你的layout目录下,再进行一遍检查!
注:未定义rtl.into的情况下,修复的文件会直接覆盖原文件!
支持的标签如下:
{
"layout_toLeftOf", "layout_toStartOf",
"layout_toRightOf", "layout_toEndOf",
"layout_marginLeft", "layout_marginStart",
"layout_marginRight", "layout_marginEnd",
"layout_alignLeft", "layout_alignStart",
"layout_alignRight", "layout_alignEnd",
"layout_alignParentLeft", "layout_alignParentStart",
"layout_alignParentRight", "layout_alignParentEnd",
"drawableLeft", "drawableStart",
"drawableRight", "drawableEnd",
}
// padding只要存在left/right,就会补充四个标签
{
"paddingLeft", "paddingStart",
"paddingRight", "paddingEnd"
}
// 支持对以下标签的value替换(left->start, right->end)
{
"layout_gravity",
"gravity"
}
【如何验证修复完善?】
Android>Lint>Internationalization>Bidirectional Text
4.使用全局样式
- EditText
EditText 控件基本都需要设置下面两个属性:
android:textAlignment="viewStart"
android:gravity="start"
可以在 style.xml 样式中全部 EditText 都设置:
- TextView
全局给所有 TextView 添加一个 RTL 属性
【判断是否是 RTL 布局】
TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == LayoutDirection.RTL
- ViewPager
Android 官方控件大多支持 RTL,ViewPager 除外。
ViewPager的rtl适配方法链接:https://github.com/diego-gomez-olvera/RtlViewPager
- 菜单栏的图标处理
图标处理:
方法一:图标做两套,放在不同的文件夹里,切换语言和阿拉伯语适配的时候,进行图标的变更;
方法二:图标保持不变,切换的时候,直接将图标右移,图标位置保持不变。
附:
插件:AndroidLocalizationer(实现语言国际化,支持30多种语言,可以实现词条strings.XML文件的转换。)
相关链接:https://blog.csdn.net/u012437660/article/details/79495537
文档还在完善中,欢迎大家提出问题,交流分享!
本文地址:https://blog.csdn.net/renus_sun/article/details/86639208
上一篇: Flex正则表达式判断中文或全角字符代码
下一篇: DOM 常用事件(详解)