在安卓应用上支持从右到左(RTL)布局

简介: 世界上的大部分语言的书写方式都是从左到右,但是也有一些语言是从右到左(Right to Left,以下简称为 **RTL** )书写的,譬如阿拉伯语,希伯来语以及叙利亚语。虽然这些都是小语种,支持RTL能给当地用户更好的体验。 从 [Google 官网](https://android-developers.googleblog.com/2013/03/native-rtl-support-

世界上的大部分语言的书写方式都是从左到右,但是也有一些语言是从右到左(Right to Left,以下简称为 RTL )书写的,譬如阿拉伯语,希伯来语以及叙利亚语。虽然这些都是小语种,支持RTL能给当地用户更好的体验。

Google 官网得知,安卓在SDK17(4.2 Jelly Bean)版本的以上能原生的支持RTL,只需以下几个步骤就能实现。

  1. AndroidManifest.xmluses-sdk 标签中,将 targetSdkVersionminSdkVersion 设为 17 或以上。
  2. AndroidManifest.xmlapplication 标签中,加入 android:supportsRtl=”true”
  3. 在布局xml文件中,将所有的 leftright 分别改为 startend,比如 android:paddingLeft 改为 android:paddingStart
  4. 由于startend 是安卓4.2以后才支持的,如果应用还要支持安卓4.2以下的旧设备,则须在保留 leftright 的基础上加入 startend,例如同时保留 android:paddingLeftandroid:paddingStart

如果你是用 Android Studio 的话,只需从 Refactor 菜单选项里点 Add RTL Support where possible 就可以一步到位完全上列操作。

同学们你以为这样就结束的话就 too young too naive 了,安卓的套路大家都知道,哪能这么容易放过码农的?让我们继续。

安卓的 RTL 引擎会自动将水平布局的排列颠倒,让 UI 控件的排列顺序变为从右到左,如图所示。

1-U2o787CWvxwi5deBWQbEXA.png

请注意该图中的图标没有左右翻转,虽然看来也没有什么问题,但是如果我们换一个有方向性的图标呢?请看下图。

1-VBZGhVg_t1z3OprbfiEszg.png

这样看起来就有点不对,后退键的方向应该指向右边才是,像这种情况我们只能手动加入镜像图片,并用 ldrtl 后缀告之。假设后退键的图片资源是放在 /res/drawable/ic_back.xml ,它的镜像图片的路径就为 /res/drawable-ldrtl/ic_back.xml

1-zY8bpdRjU0E5CzyoyiWTzA.png

不仅仅是图片,我们也可以用 ldrtl 后缀定义在RTL模式下的其它资源,比如颜色,布局和字符串等。

当安卓设备的语言设置是任何RTL语言的时候,设备默认的全局布局将自动变为 RTL。同学们也许会问,我不懂阿拉伯语,可以在测试环境下把布局改成 RTL 来方便开发吗?在开发者设定里就有这个选项,选项的名称和位置因机而异,在我的手机上是叫做 Force RTL layout direction

如果你的应用提供更该语言的选项,那么就要注意在更改语言的同时也要调整合适的布局。这里就可以用 SDK 17的 Configuration 有一个新的API,使用方法如下。

Locale locale = getLocale();
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
config.locale = locale;
if (Build.VERSION.SDK_INT >= 17) {
   config.setLayoutDirection(locale);
}
resources.updateConfiguration(config, resources.getDisplayMetrics());

getLocale() 返回的是一个 RTL 布局的语言时(如阿拉伯语),config.setLayoutDirection(locale) 将把应用的全局布局方向更新为 RTL 来显示该语言。

目录
相关文章
|
1月前
|
XML Android开发 数据格式
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
34 2
|
1月前
|
Android开发
Android梅花布局
Android梅花布局
23 1
|
2月前
|
Android开发
android 布局常见调整手段,怎样查看margin,padding等等
android 布局常见调整手段,怎样查看margin,padding等等
19 0
|
7月前
|
XML 前端开发 Android开发
android 前端常用布局文件升级总结(二)
android 前端常用布局文件升级总结(二)
|
4天前
|
开发框架 搜索推荐 .NET
Android之ListActivity 布局与数据绑定
Android之ListActivity 布局与数据绑定
10 0
|
1月前
|
XML Android开发 数据格式
Android六大布局
Android六大布局
37 1
|
4天前
|
Android开发 容器
Android Layout 布局
Android Layout 布局
|
4天前
|
搜索推荐 Android开发
自定义Android标题栏TitleBar布局
自定义Android标题栏TitleBar布局
|
4天前
|
XML Android开发 数据格式
Android五大布局对象---FrameLayout,LinearLayout ,Absolute
Android五大布局对象---FrameLayout,LinearLayout ,Absolute
|
5月前
|
Android开发
Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )
Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )
166 0