web-dev-qa-db-ja.com

値、値-v11および値-v14フォルダーのスタイルとテーマ

私は現在、Holoテーマに基づいてデザインを作成するためにアプリに取り組んでいます。私がやりたいことはグローバルに機能していますが、valuesvalues-v11、およびvalues-v14のフォルダーの機能について少し混乱しています。

だから私はそれを知っています:

  • valuesは11未満のAPIをターゲットにしています
  • values-v11は11から13までのAPIをターゲットにしています
  • values-v14は13より優れたAPIをターゲットにしています

最初は、すべてのフォルダーにアプリに必要なすべてのスタイルを指定する必要があると思いましたが、その後、一種の継承システムが導入されていることに気付きました。

私の問題は、私が本当に混乱していて、これら3つのフォルダー間でこの継承がどのように機能しているかを明確に理解していないことです。

携帯電話での動作を確認するために、次のテストを実行しました(Android 4.0で実行されているため、フォルダーvalues-v14がロードされているはずです):

valuesには、テキストの色を青で設定するスタイルがあります。

<style name="TextMedium" parent="@Android:style/TextAppearance.Medium">
    <item name="Android:textColor">@color/Blue</item>

values-v11には、テキストの色を白で設定するスタイルがあります。

<style name="TextMedium" parent="@Android:style/TextAppearance.Medium">
    <item name="Android:textColor">@color/White</item>

values-v14では、テキストの色を赤で設定するスタイルがあります。

<style name="TextMedium" parent="@Android:style/TextAppearance.Medium">
    <item name="Android:textColor">@color/Red</item>

上記の最初のケース(異なる色のすべてのフォルダー)では、テキストに読み込まれる色は赤です。つまり、values-v14フォルダーが優先されます。

次に、values-v14フォルダから赤いスタイルをコメントアウトすると、テキストが白くなります。これは、デバイスがvalues-v11フォルダーをターゲットにしている場合でも、システムがvalues-v14フォルダーのスタイルを採用することを意味しますか?デフォルトではvaluesフォルダーを使用するかもしれませんが、values-v11は使用しないと思いました。

より一般的には、私の質問は、これらの3つのフォルダーが親子として機能しているかどうかです。つまり:

  • デバイスがAPIバージョン> 13で実行されている場合、システムはvalues-v14、次にvalues-v11、最後にvaluesをロードします。
  • デバイスが11〜13のAPIで実行されている場合、システムはvalues-v11、次にvaluesをロードします。
  • デバイスがAPIバージョン<11で実行されている場合、システムはvaluesのみをロードします。

それが実際に機能している場合、親フォルダーvaluesに最大のスタイルを設定し、v11またはv14で特定のスタイルのみを追加することは理にかなっていますか?

長い質問で申し訳ありませんが、このテーマ/スタイルシステムはAndroidガイドで簡単に説明されているだけで、どのように機能するかについての情報を見つけるのは難しいです...

ご協力いただきありがとうございます!

30
Yoann Hercouet

より一般的には、私の質問は、これらの3つのフォルダーが親子として機能しているかどうかです。

これらのフォルダーは、「最も具体的な」マッチングシステムで動作します。つまり、最も近い(より低い)APIレベルのvaluesフォルダーと一致します。

  • _values-v14_ターゲットAPI> = _14_(_14_より前のバージョンではまったく選択されません)
  • _values-v11_は、_11_が存在する場合は_13_と_values-v14_の間(およびそれを含む)のAPIを対象としますそれ以外の場合 _11_以降で始まるすべてのバージョンに一致します((_11_より前のバージョンではまったく選択されません))
  • valuesはデフォルトのフォルダーであり、最後に照合され、別の_values-xx_フォルダーではカバーされない他のAPIレベルをカバーします。常に(すべてのリソースフォルダーと同様に)アプリにこのフォルダーを含める必要があります

それが実際に機能している場合、親フォルダーの値に最大のスタイルを設定し、v11またはv14に特定のスタイルのみを追加することは意味がありますか?

はい、これはAndroidプロジェクトテンプレートの構築方法です(_Create new project..._を使用する場合)。実際には、カスタマイズに_values-xx_フォルダーを使用するように指示されます(異なる外観、新しいスタイル、属性の使用):

_ <!-- in the styles.xml from the v-14 values folder: -->
 <!-- API 14 theme customizations can go here. -->
_
26
Luksprog