Android RTL 语言适配
RTL 语言,即 right to left language,也就是右对齐的语言,与一般语言按照左对齐的方式不同,需要进行特别适配。
AndroidManifest.xml 文件中,增加
android:supportsRtl属性值为 true<application
...
android:supportsRtl="true"> </application>
使用
start/end代替left/right属性值。官方给出的需要替换的属性值列表如下:
Android 对 RTL 的支持,是从 Android 4.2 版本开始的。如果项目支持的最低版本大于 4.2,可以全部替换;如果项目需要支持 4.2 以下的版本,也就是项目的
minSdkVersion小于 17 的话,两类属性值还是要同时使用。由于低于 4.2 的版本中不识别android:supportsRtl和start/end类属性,因此不受影响。除手动替换外,使用 Studio 开发,软件提供了自动化操作的支持,可以在 Refactor → Add RTL Support Where Possible 来开启 RTL 的自动调整:
在布局选项中勾选第一项,就能将布局文件中仍然存在的
left/right属性 自动修改为start/end;如果项目支持的最低版本小于 4.2 ,还需要勾选第二项。不过当自动替换完成以后,还是要进行手动测试,以确保完全修改。可以进行全局搜索,看看是否还存在仅支持 LTR(left to right) 的属性。
其他细节调整
EditView、TextView等文本控件,还需在布局文件中添加以下属性:android:textAlignment="viewStart"
android:gravity="start"
android:textDirection="locale"
其中,
android:textAlignment是专门用来指定文本的对齐位置的,可选值有"inherit"、"gravity"、"textStart"、"textEnd"、"center"、"viewStart"、"viewEnd" 等。对于文本控件来说,其优先级高于gravity,而textAlignment为空或为 "gravity" 时,文本的对齐方式就由gravity属性确定。gravity和layout_gravity属性的区别在于,gravity指定的是控件内部的子控件或文本的停靠位置,layout_gravity指定的是控件在其外部容器(父布局)中的停靠位置。
资源适配:对 Drawable 文件(mipmap 文件同此)来说,有些场景下需要适配 RTL,比如返回「←」的图标也需要替换成「→」。修改方式是创建
drawable-ldrtl目录,将翻转后的图标,放在这个目录下。如果需要限定 dpi,可以在目录名后面追加:
res/
drawable/
a.png
drawable-ldrtl/
a.png // 对标 drawable/a.png 的 RTL 图标
drawable-xhdpi/
b.png
drawable-ldrtl-xhdpi/
b.png // 对标 drawable-xhdpi/b.png 的 RTL 图标
- 布局适配:对 layout 文件来说,可以在原有 layout 文件夹后增加限定符,生成新文件夹
layout-ldrtl, 用来放置镜像语言专用的布局;也可以针对语言进行单独定制,比如阿拉伯语可以用layout-ar/:
res/
layout/
main.xml // 默认布局
layout-ar/
main.xml // 阿拉伯语布局
layout-ldrtl/
main.xml // RTL 布局
- 使用代码判断是否是镜像语言:使用
TextUtils工具类中的方法:
private static boolean isRTL() {
int locale = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault());
return locale == View.LAYOUT_DIRECTION_RTL;
}
- 布局方向的改变可能会影响原有的
setX()、setY()方法带来的效果,需要手动排查。 - 在右到左布局下,其坐标布局方式不变,
getLeft(),getRight()等方法返回值不变。变的是布局约束,view的绘制受right(start)约束。 - 在代码中修改 view 的位置,可以采用
ViewGroup.MarginLayoutParams来设置margin,或者采用 layout 的方式。
Android RTL 语言适配的更多相关文章
- android 多语言适配
建好android项目后,默认的是有个values文件,该文件下面默认的有strings.xml. 做多语言适配的时候,就需要在创建好的项目中,右键单击res文件夹,选择创建新的xml文件. 然后点击 ...
- Android项目---语言适配
android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中 ...
- Android - 多语言自动适配
Android为多语言适配提供了很大的方便.开发者不需要在代码中进行修改.只需要配置xml文件. res --> values 其中存放有xml文件.一般这些都是英文的字符串.我们可以存放其他语 ...
- android语言适配
虽然我们现在做的app基本只在国内使用,所以只需要中文,但是我们要把眼光放长远一点,以后我们的APP发展到了国外呢,所以我们就要做语言适配了 很简单 在res目录下,右键 New Resourc ...
- Android 关于屏幕适配
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 转自:http://www.c ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- Android 多语言
Android 多语言 在res文件上右击创建新的values文件 在strings文件中设置多语言 3.在layout文件中使用 @strings/key 引用相应资源
- Android Init语言
Android Init语言是一种特别简单的语言,专门用来写Android的Init进程使用的配置文件的. 相当于Linux系统中的rc文件(这句话对于Linux者多半是句废话). Android I ...
- 老李分享:android手机测试之适配(1)
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android各国语言对照表(values-xxx)
eg: 阿拉伯 Arabic SA values-ar Android各国语言对照表https://blog.csdn.net/jiangguohu1/article/details/5044014 ...
随机推荐
- .net core 因路径原因导致的JSON解析错误
因解析json配置文件导致的错误: JsonReaderException: '0xEF' is an invalid escapable character within a JSON string ...
- Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR
系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能.但是通过对 Cilium 不同模式的切换/功能的启用,可以 ...
- 洛谷 P1122 最大子树和 题解
一道入门的树形DP. 首先我们对于数据进行有序化处理,这便于我们利用数据结构特点(可排序性)来发觉数据性质(有序.单调.子问题等等性质),以便于后续的转化.推理和处理.有序化可以"转化和创造 ...
- 【实践篇】DDD脚手架及编码规范
一.背景介绍 我们团队一直在持续推进业务系统的体系化治理工作,在这个过程中我们沉淀了自己的DDD脚手架项目.脚手架项目是体系化治理过程中比较重要的一环,它的作用有两点: (1)可以对新建的项目进行统一 ...
- Hadoop环境安装与配置
1.基础操作系统环境安装(略) 2.JDK的安装与配置 当前各大数据软件如Hadoop等,仍然停留在Java 8上,在本实验选用的是Java 8.在自己的Linux系统中,jdk可以使用如下命令进行一 ...
- PanGu-Coder2:从排序中学习,激发大模型潜力
本文分享自华为云社区<PanGu-Coder2:从排序中学习,激发大模型潜力>,作者: 华为云软件分析Lab . 2022年7月,华为云PaaS技术创新Lab联合华为诺亚方舟语音语义实验室 ...
- 如何将GitLab仓库同步到GitHub和Gitee?
作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 在之前写的[Kimi.RocketMQ.NET]开源项目中,代码我是放在自己搭建的GitLab服 ...
- 分库表数据倾斜的处理让我联想到了AKF模型
1 背景 最近在做需求的时候需要在一张表中增加一个字段. 这张表情况如下: 1.拆分了多个库多张表 2.库表拆分按表中商户编码字段hash之后取模进行拆分 由于库表拆分按照商户编码,有些大商家的单子数 ...
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理
在我们窗口新增.编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时 ...
- Intrusion Detection Using Convolutional Neural Networks for Representation Learning 笔记
Intrusion Detection Using Convolutional Neural Networks for Representation Learning 2.2 实验数据的预处理 为了确 ...