android:是约束布局支持RTL

时间:2017-02-17 16:11:56

标签: android right-to-left

在android Studio的约束布局中支持RTL的最佳实践是什么,
或者我应该创建一个单独的布局,一个用于英语,另一个用于阿拉伯语?

英文版

English version

使用阿拉伯语的预期布局 The Expected layout with Arabic language

将设备语言从英语更改为阿拉伯语时的输出布局 The output layout when Change the Language from English to Arabic

<?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>

4 个答案:

答案 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)

enter image description here设计模式尚不支持RTL指南。

简单解决方案 - 清理您的项目,以便您没有生成文件。 替换所有&#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 = “父”