在android Studio的约束布局中支持RTL的最佳实践是什么,
或者我应该创建一个单独的布局,一个用于英语,另一个用于阿拉伯语?
英文版
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="@string/CourseName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView7"
android:layout_marginTop="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="16dp"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
<Button
android:text="@string/enroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:layout_marginTop="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="16dp"
android:textAppearance="@style/TextAppearance.AppCompat.Display2" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:10)
正如CommonsWare已经指出的那样,如果你打算支持RTL语言,你应该很少/从不使用左/右,特别是如果你的目标是API 16 +。
将app:layout_constraintRight_toRightOf="parent"
替换为app:layout_constraintEnd_toEndOf="parent"
,依此类推。
为右,从左开始。
答案 1 :(得分:6)
不幸的是,他们做得不对(或“结束”;-))。
在许多约束中,例如对父级的约束,Android Studio使用“Left”/“Right”创建约束,其中它应分别使用“Start”/“End”。它导致RTL语言出现问题(每种语言的字母都是中东语)。
更糟糕的是:我甚至还没有看到任何关于此的漏洞。
我的解决方案:关闭Android Studio (因此它不会在我编辑时跳转并尝试修复),然后使用Atom和RegExp(或sed
命令) ,我小心地将“layout_constraintLeft_toLeftOf
”替换为“layout_constraintStart_toStartOf
”,将“layout_constraintRight_toRightOf
”替换为“layout_constraintEnd_toEndOf
”。
抱歉,没有发现任何不那么愚蠢的东西: - (
注意强> 链接更糟糕。 RTL布局甚至不能很好地链接,也不保持布局。
我的结论就是回到原来的Layouts,直到Google为RTL语言提供成熟的支持...... 毕竟,RTL早在LTR之前就已存在; - ) < / p>
我向Google开了一个错误。他们说它将“固定在2.4”。
更新:
Marked as Fixed
修正了2.4
2017年4月25日
答案 2 :(得分:1)
简单解决方案 - 清理您的项目,以便您没有生成文件。 替换所有&#34;左&#34;用&#34;开始&#34; 所有&#34;对&#34;用&#34;结束&#34;在你的xml文件中。 注 - 区分大小写
多数民众赞成!!
答案 3 :(得分:0)
是约束布局支持RTL,但是对于使用RTL“开始和结束”,应使用约束而不是“左右”约束。
示例: 使用 应用程式:layout_constraintEnd_toEndOf = “父” 代替 应用程式:layout_constraintRight_toRightOf = “父”
AND
Use
应用程式:layout_constraintStart_toStartOf = “父” 代替 应用程式:layout_constraintLeft_toLeftOf = “父”