Android 开发:如何让App支持RTL模式
2016-08-01 16:57
447 查看
前言
讲真,好久没写博客了,2016都过了一半了,赶紧重新捡起来。(个人感慨,和内容无关……
所谓RTL,顾名思义也就是Right To Left,是一种阿拉伯语、波斯语等情况下从右往左的阅读方式。当所开发的App等面向海外用户时需要做这个适配。
从Android 4.2开始支持原生的RTL模式,对此之前的版本我也不想多做说明,这些老版本要是还支持那Android碎片化就没完没了了。
这里有一个官方文档,大家可以去看看:Material Bidirectionality 。
正文
如何查看效果
首先要说的是,想要看RTL模式,不必去把手机中的语言/国家设置到阿拉伯等,只需要在“开发者选项”中勾选“强制使用从右到左的布局方向“,这样真的是方便太多了。此处以MIUI为例,大家也不妨自己动手试试。
如图,原本左右两侧的控件发生了对调,值得注意的是图中红色方框标注的图标发生了翻转(更标准的说法是”镜像“)。
如何支持RTL
是不是很有意思呢,那么如果在你的App中适配RTL呢?1,需要在清单文件总队RTL的支持做一个声明,放到< application >节点下。
android:supportsRtl="true"
2,将布局中的”left、right“相关的属性换成对应的”start、end“属性。
这一步可能用说的不够清晰,看代码看图!
<Button android:id="@+id/button" android:text="A" android:layout_width="60dp" android:layout_height="40dp" /> <Button android:id="@+id/button2" android:text="B" android:layout_toRightOf="@id/button" android:layout_width="60dp" android:layout_height="40dp" /> <Button android:id="@+id/button3" android:text="C" android:layout_toRightOf="@id/button2" android:layout_width="60dp" android:layout_height="40dp" />
应该可以看出来这是在一个相对布局中,默认情况下是这样的:
开启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-xhdpi drawable-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上了,打算以后将布局相关的博客代码都放到这个工程里,欢迎大家StarStar啊。
GitHub AndroidLayout
相关文章推荐
- 如何优雅的使用Retrofit、Rxjava、Butterknife、Material开发一款MVP模式的新闻+天气预报+妹子的Android app
- 如何在开发时可以让Android应用程序支持安装到SD卡
- Android App 开发 设计模式第一篇:迭代器模式
- [置顶] android开发之来电自动拒接并自动回复短信_上课模式app
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- ubuntu共享wifi(AP)给安卓(Android)手机,如何查看ubuntu无线网卡是否支持AP(master )模式
- Android App 开发 设计模式第八篇:抽象工厂模式
- android usb host 模式下开发 usb 口被device 占用如何连接PC查看logcat
- 独立android开发者开发app如何盈利
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- 如何选择android app开发的方式
- Android App 开发 设计模式第三篇:模板方法模式
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- 如何在开发时可以让Android应用程序支持安装到SD卡
- 独立android开发者开发app如何盈利
- Android App 开发 设计模式第五篇:单件模式
- Android App 开发 设计模式第六篇:原型模式
- 独立Android开发者开发app如何盈利
- Android开发实践经验谈:如何让各式手机浏览器可以直接下载apk安装文件且实现自动安装APP