web-dev-qa-db-ja.com

android:制約レイアウトサポートRTLです

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>
14
manar musTapha

CommonsWareですでに指摘されているように、RTL言語のサポートを計画している場合、特にAPI 16以降をターゲットにしている場合は、まれに/決して左/右を使用する必要があります。

app:layout_constraintRight_toRightOf="parent"app:layout_constraintEnd_toEndOf="parent"などに置き換えます。

右に終了、左に開始。

12

残念ながら、彼らはそれを正しく行いません(または、「終了」;-))。

親への制約など、多くの制約では、Android Studioは「Start」/「End」をそれぞれ使用する必要がある「Left」/「Right」を使用して制約を作成します。 RTL言語(アルファベットが中東であるすべての単一言語)で問題が発生します。

さらに悪いことに、それについての未解決のバグはまだ見ていません。

私の解決策:Android Studioを閉じます(編集中にジャンプして修正しようとしないようにします)次に、AtomとRegExpを使用します(またはsedコマンド)、「layout_constraintLeft_toLeftOf」を「layout_constraintStart_toStartOf」に、「layout_constraintRight_toRightOf」を「layout_constraintEnd_toEndOf」に慎重に置き換えます。

申し訳ありませんが、それほど愚かなものは見つかりませんでした:

連鎖するとさらに悪化します。 RTLレイアウトは、適切に連鎖することも、レイアウトを維持することもできません。

その場合の私の結論は、GoogleがRTL言語の成熟したサポートを提供するまで、古いレイアウトに戻ることでした...結局のところ、RTLはLTRよりずっと前にここにありました;-)

更新:解決策が近づいています

Googleにバグを公開しました。彼らはそれが「2.4で修正される」と言います。

更新:

---(修正済みとしてマーク
2.4で修正

2017年4月25日

5
Meymann

enter image description here デザインモードはまだRTLガイドラインをサポートしていません。

簡単な解決策-ファイルを生成しないようにプロジェクトをクリーンアップします。 xmlファイル内のすべての「Left」を「Start」に、すべての「Right」を「End」に置き換えます。注-大文字と小文字が区別されます

それでおしまい!!

1
Amit Kaushik

はい、制約レイアウトはRTLをサポートしていますが、RTLを使用するには、「左右」の制約の代わりに「開始と終了」の制約を使用する必要があります。

例:app:layout_constraintRight_toRightOf = "parent"の代わりにapp:layout_constraintEnd_toEndOf = "parent"を使用します

                  AND

                  Use

app:layout_constraintLeft_toLeftOf = "parent"の代わりにapp:layout_constraintStart_toStartOf = "parent"

0
Bhupendra Joshi