RTL 语言,即 right to left language,也就是右对齐的语言,与一般语言按照左对齐的方式不同,需要进行特别适配。

  1. AndroidManifest.xml 文件中,增加 android:supportsRtl 属性值为 true

     <application
    ...
    android:supportsRtl="true"> </application>
  2. 使用 start/end 代替 left/right 属性值。

    官方给出的需要替换的属性值列表如下:

    Android 对 RTL 的支持,是从 Android 4.2 版本开始的。如果项目支持的最低版本大于 4.2,可以全部替换;如果项目需要支持 4.2 以下的版本,也就是项目的 minSdkVersion 小于 17 的话,两类属性值还是要同时使用。由于低于 4.2 的版本中不识别 android:supportsRtlstart/end 类属性,因此不受影响。

    除手动替换外,使用 Studio 开发,软件提供了自动化操作的支持,可以在 RefactorAdd RTL Support Where Possible 来开启 RTL 的自动调整:

    在布局选项中勾选第一项,就能将布局文件中仍然存在的 left/right 属性 自动修改为 start/end;如果项目支持的最低版本小于 4.2 ,还需要勾选第二项。

    不过当自动替换完成以后,还是要进行手动测试,以确保完全修改。可以进行全局搜索,看看是否还存在仅支持 LTR(left to right) 的属性。

  3. 其他细节调整

    • EditViewTextView 等文本控件,还需在布局文件中添加以下属性:

      android:textAlignment="viewStart"
      android:gravity="start"
      android:textDirection="locale"

      其中,

      • android:textAlignment 是专门用来指定文本的对齐位置的,可选值有"inherit"、"gravity"、"textStart"、"textEnd"、"center"、"viewStart"、"viewEnd" 等。对于文本控件来说,其优先级高于 gravity ,而 textAlignment 为空或为 "gravity" 时,文本的对齐方式就由 gravity 属性确定。
      • gravitylayout_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的绘制受rightstart)约束。
    • 在代码中修改 view 的位置,可以采用 ViewGroup.MarginLayoutParams 来设置margin,或者采用 layout 的方式。

Android RTL 语言适配的更多相关文章

  1. android 多语言适配

    建好android项目后,默认的是有个values文件,该文件下面默认的有strings.xml. 做多语言适配的时候,就需要在创建好的项目中,右键单击res文件夹,选择创建新的xml文件. 然后点击 ...

  2. Android项目---语言适配

    android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中 ...

  3. Android - 多语言自动适配

    Android为多语言适配提供了很大的方便.开发者不需要在代码中进行修改.只需要配置xml文件. res --> values 其中存放有xml文件.一般这些都是英文的字符串.我们可以存放其他语 ...

  4. android语言适配

    虽然我们现在做的app基本只在国内使用,所以只需要中文,但是我们要把眼光放长远一点,以后我们的APP发展到了国外呢,所以我们就要做语言适配了   很简单 在res目录下,右键  New Resourc ...

  5. Android 关于屏幕适配

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 转自:http://www.c ...

  6. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  7. Android 多语言

    Android 多语言 在res文件上右击创建新的values文件 在strings文件中设置多语言 3.在layout文件中使用 @strings/key 引用相应资源

  8. Android Init语言

    Android Init语言是一种特别简单的语言,专门用来写Android的Init进程使用的配置文件的. 相当于Linux系统中的rc文件(这句话对于Linux者多半是句废话). Android I ...

  9. 老李分享:android手机测试之适配(1)

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  10. Android各国语言对照表(values-xxx)

    eg: 阿拉伯 Arabic  SA values-ar Android各国语言对照表https://blog.csdn.net/jiangguohu1/article/details/5044014 ...

随机推荐

  1. JDK源码-StringJoiner源码分析

    背景 功能描述:将多个元素使用指定符号前后连接为字符串:eg:1 2 3 4 5 , => 1,2,3,4,5 要点: 多个元素 指定分隔符 分隔符只在元素之间,不能作为第一或最后一个 使用方法 ...

  2. 从零玩转系列之微信支付实战PC端支付微信回调接口搭建

    一.前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布 ...

  3. Mysql高级5-SQL优化

    一.插入数据优化 1.1 批量插入 如果有多条数据需要同时插入,不要每次插入一条,然后分多次插入,因为每执行一次插入的操作,都要进行数据库的连接,多个操作就会连接多次,而一次批量操作只需要连接1次 1 ...

  4. linux基础:编译

    程序编译 在linux中,gnu项目提供了gcc编译器.g++编译器和gdb调试器. C和C++语言正在不断发展,为了保持兼容程序语言的最新特性,开发者通常选择GCC来编译C语言编写的源代码,选择G+ ...

  5. opencv-python 车牌检测和识别

    首先利用级联分类器把车牌位置找到取出来,然后用ocr进行车牌识别. 1 OCR之Tesseract安装 Tesseract安装可以参考这个链接: https://blog.csdn.net/m0_53 ...

  6. Android Studio Giraffe安装与gradle配置

    本机环境:win10专业版,64位,16G内存. 原先用的AS2.2,是很早之前在看<第一行代码Android(第2版)>的时候,按书里的链接下载安装的,也不用怎么配置.(PS:第一行代码 ...

  7. Go 并发编程 - Goroutine 基础 (一)

    基础概念 进程与线程 进程是一次程序在操作系统执行的过程,需要消耗一定的CPU.时间.内存.IO等.每个进程都拥有着独立的内存空间和系统资源.进程之间的内存是不共享的.通常需要使用 IPC 机制进行数 ...

  8. 如何使用Vite创建Vue3的uniapp项目

    项目结构 my-vue3-project ├─ .env //默认环境变量 ├─ .env.development //开发环境变量 ├─ .eslintrc-auto-import.json //( ...

  9. Mac上使用Royal TSX快速连接到OCI主机

    问题: 每次使用Royal TSX连接到OCI主机都要交互式输入opc这个用户名,次数多了也蛮烦. 那如何既指定用户名,又想要通过ssh私钥登陆机器呢? 这个需求确实很初级,但也着实困扰过我,因为开始 ...

  10. 后端常用的Linux命令大全,建议收藏

    引言 作为一名后端工程师,使用终端是一种常见的做法,也是你应该学习的技能.许多命令和实用程序可以帮助你在使用 Linux 时更有效地完成任务. 基本 Linux 命令 如果你想使用 Linux 操作系 ...