8

Android 4.2 以降、RTL 言語が完全にサポートされています。
StartandEndを置き換えLeftRightレイアウトを定義できますが、Android 4.1 以前では start と end がサポートされていません。
両方のレイアウト方向に 1 つの xml のみを使用するには、レトロ互換性のためにstartandleftまたはendandrightの両方を使用できます。
例えば ​​:

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

Android 4.3では、デバイスのみが使用されstartendパラメーターと無視leftrightれ、両方が定義されています。

ただし、Android 4.2.2デバイスでは両方のパラメーターを使用します。

フォルダーを使用して、パラメーターとlayout-v17各レイアウトを複製する必要があります。他の解決策はありますか?startend

4

2 に答える 2

3

公式の回避策があるかどうかはわかりませんので、ハックを実装しました。

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を置き換えてフォルダーに配置することもできますが、機能しないため、これがよりうまく機能することがわかりました!startendlayout-v17android:gravity="start"

私はかなり初心者なGradleので、もっと簡単なスクリプトでこれを行うことができればすみません:)

于 2015-02-26T12:37:55.733 に答える