前言

讲真,好久没写博客了,2016都过了一半了,赶紧重新捡起来。(个人感慨,和内容无关……

所谓RTL,顾名思义也就是Right To Left,是一种阿拉伯语、波斯语等情况下从右往左的阅读方式。当所开发的App等面向海外用户时需要做这个适配。

从Android 4.2开始支持原生的RTL模式,对此之前的版本我也不想多做说明,这些老版本要是还支持那Android碎片化就没完没了了。

正文

如何查看效果

首先要说的是,想要看RTL模式,不必去把手机中的语言/国家设置到阿拉伯等,只需要在“开发者选项”中勾选“强制使用从右到左的布局方向“,这样真的是方便太多了。

此处以MIUI为例,大家也不妨自己动手试试。

如图,原本左右两侧的控件发生了对调,值得注意的是图中红色方框标注的图标发生了翻转(更标准的说法是”镜像“)。

如何支持RTL

是不是很有意思呢,那么如果在你的App中适配RTL呢?

1,需要在清单文件总队RTL的支持做一个声明,放到< application >节点下。

android:supportsRtl="true"

2,将布局中的”left、right“相关的属性换成对应的”start、end“属性。

这一步可能用说的不够清晰,看代码看图!

    

应该可以看出来这是在一个相对布局中,默认情况下是这样的:

开启RTL后,却是这样的:

为什么B、C按钮不见了?因为根据属性,它们都在A的右边,这已经超出的屏幕边界。

如果我们对布局做一点修改:

android:layout_toRightOf改成 android:layout_toEndOf如果有left,也照搬改成start就好。

页面不想支持RTL怎么办

有一些界面你不想它支持RTL,或者它本身不需要支持,那又该如何呢?比如说拨号界面,难道要把数字键也镜像过去吗:

只需要加上这么一句就好了呀。

layoutDirect可以使用4种属性:ltr:从左往右rtl:从右往左inherit:从上层视图中继承locale:由Locale决定分别对应的int值为0,1,2,3。

图片怎么办

只需要创建一个文件夹,把镜像后的图片放进去即可,代码中不用做任何修改。

drawable-ldrtl-xhdpidrawable-xhdpi分辨率是一一对应的

当然了,除了对图像做预处理外,要是想用代码直接控制也是可以的。

private ImageView image2;// 省略image2 =  (ImageView) findViewById(R.id.image2);Drawable arrow = getResources().getDrawable(R.drawable.arrow);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    if (arrow != null) {       arrow.setAutoMirrored(true);    }}image2.setImageDrawable(arrow);

结尾

还没写完,以后再增改。

有一个小Demo,托管到GitHub上了,希望以后可以将布局相关的博客代码都放到这一个工程下面,欢迎大家 Star 啊。

GitHub AndroidLayout

更多相关文章

  1. android自定义UI模板图文详解
  2. 【Android】27.0 UI开发(九)——Android五大布局
  3. Android(安卓)shape学习记录
  4. Android(安卓)AlertDialog对话框自定义风格的另类实现
  5. Android透明状态栏——你要的只是几个方法
  6. 从零开始--系统深入学习android(实践-让我们开始写代码-指南-1.He
  7. [UI控件问题] android屏幕自适应 android 属性
  8. 【腾讯bugly干货】关于 Android(安卓)N 那些你不知道的事儿
  9. Android之根布局动态加载子布局时边距设置无效问题

随机推荐

  1. Android弹出菜单的灵活运用(自定义AlertD
  2. Android实现检测耳机插入和拔出
  3. Android:Actionbar的显示和隐藏
  4. Android CTS 问题分析
  5. 360加固保加固的安卓/Android包,重金求APP
  6. Qt on Android Episode 2(翻译)
  7. Android 快速开发框架 ThinkAndroid
  8. Android完整的app项目
  9. 《Android》Lesson08-Activity的生命周期
  10. Android(安卓)TableLayout