web-dev-qa-db-ja.com

プロジェクトはRTL属性を参照しますが、RTLサポートを明示的に有効または無効にしません

Eclipseマニフェストファイルで、警告メッセージが表示されます。アプリケーション言語はトルコ語です(右から左ではありません)。

"プロジェクトはRTL属性を参照しますが、マニフェストでAndroid:supportsRtlを使用してRTLサポートを明示的に有効または無効にしません"

Android:supportsRtl行を追加できません。私の最小SDKバージョン番号が9なので、この警告は重要ですか?

ありがとう

21
manowar_manowar

RTL(=右から左のロケール)をサポートしない場合は、startのすべての参照をで置き換える必要があります。 leftおよびendbyrightあなたのXMLレイアウトで。

「start」、「end」、「paddingStart」、「paddingEnd」、「Android:layout_alignParentStart」などの属性は「RTL属性」です。その意味は現在のロケールによって異なります。これを行わない場合のリスクは、テキストがトルコ語で表示されている場合でも、誰かがシステム言語をアラビア語またはヘブライ語に設定すると、レイアウトがミラーリングされることです。

具体的には、「開始」は次の場合に「正しい」を意味します。

  • 現在のシステム言語はRTLです(アラビア語、ヘブライ語...)
  • AND AndroidデバイスはAPI 17以降
  • ANDAndroid:supportsRtlがマニフェストでtrueに設定されている

それ以外の場合は「左」を意味します。

したがって、Android:layout_gravity = "start"またはレイアウトのいずれかの開始/終了属性を使用していて、設定していない場合、この警告が表示されますAndroid:supportsRtl = "true"マニフェスト内。

最小SDKが16以下でRTLをサポートしたくない場合は、実際に警告の1つを選択する必要があることに注意してください。

  • startをleftに置き換えた場合、警告が表示されます:「left」の代わりに「start」を使用して、右から左のロケールで正しく動作するようにしますId =RtlHardCoded
  • Android:supportsRtlfalseに設定した場合:属性「supportsRtl」はAPIレベル17以上でのみ使用されます(現在の最小値は9)。 Id =UnusedAttribute
  • それ以外の場合:**プロジェクトはRTL属性を参照しますが、マニフェストでAndroid:supportsRtlを使用してRTLサポートを明示的に有効または無効にしません** Id =RtlEnabled

RTLをサポートしていない場合は、警告ではなくRtlHardCodedをInfoに設定するのが理にかなっています。

より詳しい情報:

http://Android-developers.blogspot.co.il/2013/03/native-rtl-support-in-Android-42.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/hsDu+(Android +開発者+ブログ)

http://developer.Android.com/guide/topics/manifest/application-element.html#supportsrtl

41
BenL