这里写自定义目录标题
1. 基本属性
- 所有的paddingLeft,PaddingRight,MarginLeft,MarginRight这种全部都不要用了,一律改成Start和End。这样在镜像之后Android会自动保持原来的布局风格,将左和右倒过来。
- 如果是NextFocusLeft和NextFocusRight这种没有Start和End的替代的属性的话,不要再用了,在代码里面根据RTL情况实际配置。
- 视图代码中的setPadding改成setPaddingRelative。如果有其他关于左右的api时,也检查一下有没有对应的relative方法,改成该方法会自动适应镜像布局。(入参为x和y这种坐标概念的时候不需要检查,会自动镜像)。
- 视图代码中的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>
在引用的时候只需要改用新增的这个文件即可。