RTL参数的错误行为破坏了android 4.2.2

A. *_*and 8 android right-to-left

从Android 4.2开始,完全支持RTL语言.
Start并且End可以替换LeftRight定义布局,但Android 4.1及更早版本不支持开始和结束.
只使用一个XML两种布局方向,我们可以同时使用startleftendright的retrocompatibility.
举个例子 :

<View
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    />
Run Code Online (Sandbox Code Playgroud)

使用android 4.3,设备仅使用startend参数,并忽略leftright两者都定义.

但是用android 4.2.2设备使用这两个参数!

我必须使用layout-v17文件夹来复制每个布局startend参数.
还有另一种解决方案吗?

Art*_*hur 3

好吧,我不知道是否有任何官方解决方案,所以我实施了一个 hack。

gradle.build我将其添加到文件末尾

String targetRTLDir = "res/layout-ldrtl"
task copyTask(type: Copy) {
    delete fileTree(dir: targetRTLDir)

    from 'res/layout'
    into targetRTLDir

    filter { String line -> line.replaceAll('Right', 'RTL_R') }
    filter { String line -> line.replaceAll('Left', 'Right') }
    filter { String line -> line.replaceAll('RTL_R', 'Left') }
    filter { String line -> line.replaceAll('android:layout_gravity="right"', 'android:layout_gravity="rtl_r"') }
    filter { String line -> line.replaceAll('android:layout_gravity="left"', 'android:layout_gravity="right"') }
    filter { String line -> line.replaceAll('android:layout_gravity="rtl_r"', 'android:layout_gravity="left"') }
    filter { String line -> line.replaceAll('android:gravity="right"', 'android:gravity="rtl_r"') }
    filter { String line -> line.replaceAll('android:gravity="left"', 'android:gravity="right"') }
    filter { String line -> line.replaceAll('android:gravity="rtl_r"', 'android:gravity="left"') }
    filter { String line -> line.replaceAll('android:gravity="start"', 'android:gravity="right"') }
    filter { String line -> line.replaceAll('android:gravity="end"', 'android:gravity="left"') }
}

preBuild.dependsOn('copyTask')
Run Code Online (Sandbox Code Playgroud)

它所做的只是将所有文件从layout复制到layout-ldrtl并交换所有leftright

如果需要,您也可以将所有leftand替换rightstartandend并将其放入layout-v17文件夹中,但我发现这样做效果更好,因为android:gravity="start"不起作用!

我对 很陌生Gradle,所以请原谅,如果这可以用更简单的脚本来完成:)