Android RTL语言视图适配(保加利亚,阿拉伯语种等)

发布于:2025-05-16 ⋅ 阅读:(11) ⋅ 点赞:(0)

这里写自定义目录标题

1. 基本属性

  1. 所有的paddingLeft,PaddingRight,MarginLeft,MarginRight这种全部都不要用了,一律改成Start和End。这样在镜像之后Android会自动保持原来的布局风格,将左和右倒过来。
  2. 如果是NextFocusLeft和NextFocusRight这种没有Start和End的替代的属性的话,不要再用了,在代码里面根据RTL情况实际配置。
  3. 视图代码中的setPadding改成setPaddingRelative。如果有其他关于左右的api时,也检查一下有没有对应的relative方法,改成该方法会自动适应镜像布局。(入参为x和y这种坐标概念的时候不需要检查,会自动镜像)。
  4. 视图代码中的layoutParams.leftMargin = xxx,这种改成setMarginStart()。右侧同理改成setMarginEnd()。
/**
 * @return true 判断布局是否是RTL
 */
public static boolean isRtl() {
    //判断左右颠倒
    return TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL;
}

2. TextView

基本上所有的TextView和EditText都需要增加这些属性:

android:textDirection="locale" <!-- 文本的排放顺序跟随系统,系统是RTL该View也RTL -->
android:textAlignment="viewStart" <!-- 文本对齐方式为视图的起点,这样RTL时会自动翻转过来 -->

在RTL布局中,密码仍然遵循LTR的阅读方式,最左边的字符的下标为0

3. 图片

3.1 静态替换

大部分图片都不需要在RTL布局中也镜像,但是也有一些例外,比如说左右箭头这种,如果在RTL布局中没有镜像的话就没办法看了。

在项目的资源文件夹中,新建两个rotate.xml文件。一个在values里面,一个在values-ldrtl(没有该文件夹的话新建一个)(图片是我写错了,文件夹名为values-ldrtl)
在这里插入图片描述

文件内容如下,一一对应放进去就行:

<!--values-->
<resources>
    <integer name="drawable_rotate">0</integer>
</resources>
<!--values-ldrtl-->
<resources>
    <integer name="drawable_rotate">180</integer>
</resources>

接下来通过在drawable文件夹中,通过新增一个替换用的资源文件来自适应镜像布局:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="@integer/drawable_rotate"
    android:toDegrees="@integer/drawable_rotate"
    android:pivotX="50%"
    android:pivotY="50%"
    android:drawable="@drawable/left_icon"> <!-- 需要自适应镜像的图片 -->
</rotate>

在引用的时候只需要改用新增的这个文件即可。


网站公告

今日签到

点亮在社区的每一天
去签到