android - 使用 android 4.2.2 破解 RTL 参数的错误行为

标签 android right-to-left

从android 4.2开始,全面支持RTL语言。
StartEnd 可以代替 LeftRight 来定义布局,但 android 4.1 及更早版本不支持 start 和结尾。
要对两个布局方向仅使用一个 xml,我们可以同时使用 startleftendright追溯兼容性。
例如:

<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"
    />

With android 4.3 , device 仅使用 startend 参数并忽略 leftright 两者都定义的地方。

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

我必须使用 layout-v17 文件夹来复制带有 startend 参数的每个布局。
还有其他解决方案吗?

最佳答案

嗯,我不知道是否有任何官方解决方法,所以我实现了一个 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')

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

你也可以把所有的leftright替换成startend,放到中>layout-v17 文件夹,但我发现这样效果更好,因为 android:gravity="start" 不起作用!

我是 Gradle 的新手,如果这可以用更简单的脚本来完成,请原谅我:)

关于android - 使用 android 4.2.2 破解 RTL 参数的错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868059/

相关文章:

android - Room Persistence Library 没有 "NOT NULL"和 "UNIQUE"约束

html - CSS反转整个网站(镜像效果)

HTML 方向 rtl 问题

html - 哪个是处理 RTL CSS 的最佳方式

php - 在 PHPWord 模板中正确插入 RTL 文本

android - 如何在android中使JsonArray清晰?

java - 如何禁用 imageview 事件?

android - 具有 levenshtein 排序和逐字逐句的 Firebase 高级模糊搜索

github - 如何在 github README 文件中编写阿拉伯语?

java - libGDX - 纹理存储在哪里?