web-dev-qa-db-ja.com

RTL固有のドローアブルを指定する方法

右から左に異なる画像がいくつかあります。関連する画像を自動ロードするために、RTL固有の描画可能なディレクトリまたはファイル名の一部のRTLポストフィックスを作成することは可能ですか? 17 lvlから追加されたldrtl post-fixは、layoutsディレクトリにのみ有効です。

33
Vitaliy A

この質問に答えるのはかなり遅いですが、私が見つけた方法を共有したいと思います。私は最初に他の人が言っていることを要約します。


仕様から始めましょう。

次のようなものを構築する必要があります。

login --> take picture --> win prize

RTLでは、次のようになります。

ezirp niw <-- erutcip ekat <-- nigol

したがって、大きな問題は、描画可能な矢印を反転する方法です。それをarrow_right.png-->と呼びましょう。RTLでは、次のようにする必要があります:<--


Android> = 19の場合

他の人が述べたように、autoMirrored=trueフラグを使用できます。 (API19から利用可能)

使い方:

<ImageView ...
    src="@drawable/arrow_right"
    autoMirrored="true" />    

資産:

   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png

ご了承ください:

  • arrow_right.png内部drawable-*には-->が含まれています

備考:唯一の欠点は、下位互換性がないことです。


Android <19、Option 1の場合

他の人が指摘したように、ldrtlオプションを使用できます。 (doc:リソースの提供)

使い方:

<ImageView ...
    src="@drawable/arrow_right" />

資産:

   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xxxhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xxhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-hdpi
        └── arrow_right.png
   ├── drawable-ldrtl-mdpi
        └── arrow_right.png

ご了承ください:

  • arrow_right.png内部drawable-*には-->が含まれています
  • arrow_right.png内部drawable-ldrtl-*には<--が含まれています。

備考:この方法には何も問題はありませんが、10xのアセットファイルのように準備する必要があります。それで、次のオプションを見つけることができます。


Android <19、Option 2の場合

このオプションはrotationY="180"属性を使用します。 (API11から利用可能)

rotationY="180"ImageViewに設定すると、--><--になります。

したがって、次のようなことができます。

使い方:

<ImageView ...
    src="@drawable/arrow_right"
    Android:rotationY="@integer/angle_rtl_180" />

資産:

  drawable
   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png
   ├── values
        └── integers.xml
   ├── values-ldrtl
        └── integers.xml

注意:

  • arrow_right.pngには-->が含まれています
  • values/integersには<integer name="angle_rtl_180">0</integer>が含まれています
  • values-ldrtl/integersには<integer name="angle_rtl_180">180</integer>が含まれています

備考:必要なアセットは1セットだけで、このソリューションはAPI 11から使用できます。使用方法は、Android:rotationY="@integer/angle_rtl_180"を追加するだけです。

それが役に立てば幸い!

33

17+(4.2.x +)の場合はレイアウト方向(ld)リソース修飾子を使用でき、右から左(RTL)の場合はldrtlおよび左から右(LTR)にはldltrを使用できます。例:あなたは使うことができます

res/ drawable // Default drawable-ldltr // LTR drawable-ldrtl // RTL

また、他の修飾子と同様に、他の多くの修飾子と組み合わせることができます。 drawable-ldrtl-xhdpildrtlxhdpiより前にあることに注意してください。そうしないと、aaptが文句を言うでしょう。

そして、@ Dennisが19+(4.4+)から言及したように、 autoMirrored を使用すると簡単になります

39
eveliotc

ドローアブルを自動ミラーリングするオプションがあります。 autoMirrored 属性を確認します。

8
Dennis