ActionBarアイコンガイド で説明されているように、2つのアイコン(ダークとライト)ができました。
@drawable/ic_search_light
@drawable/ic_search_dark
XMLメニューリソースでこれらのアイコンを参照する方法:
<item Android:title="Search" Android:icon="
ここで描画できるのはどれですか? "/>
アプリケーションテーマをライトとダークの間で切り替えるたびに、これらすべての描画可能な参照を更新する必要がありますか?
Android drawables(およびres/valuesにある他の多くの要素)をテーマに依存するように定義する方法があります。
この場合、2つのdrawables、メニューアイコンがあるとします。
_res/drawable/ic_search_light.png
res/drawable/ic_search_dark.png
_
また、デフォルトのTheme
またはそれを拡張したアプリケーションテーマに_ic_search_dark.png
_を使用します。同様に、アプリケーションテーマがデフォルトの_ic_search_light.png
_または何らかのテーマに変更された場合は_Theme.Light
_が必要です。それを拡張します。
/ res/attrs.xmlのように、一意の名前で一般属性を定義します。
_<resources>
<attr name="theme_dependent_icon" format="reference"/>
</resources>
_
これはグローバル属性であり、フォーマットタイプは参照です。カスタムビューの場合は、スタイル設定可能な属性とともに定義できます。
_<resources>
<declare-styleable name="custom_menu">
<attr name="theme_dependent_icon" format="reference"/>
</declare-styleable>
</resources>
_
次に、2つのテーマを定義し、デフォルトのTheme
と_Theme.Light
_(またはこれらから継承するテーマ)をres/styles.xmlまたはres/themesに拡張します。 xml:
_<resources>
<style name="CustomTheme" parent="Android:Theme">
<item name="theme_dependent_icon" >@drawable/ic_search_dark</item>
</style>
<style name="CustomTheme.Light" parent="Android:Theme.Light">
<item name="theme_dependent_icon" >@drawable/ic_search_light</item>
</style>
</resources>
_
最後に、定義した参照属性を使用して、これらのアイコンを参照します。この場合、メニューレイアウトを定義するときに使用します
_<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:title="Menu Item" Android:icon="?attr/theme_dependent_icon"/>
</menu>
_
_?attr
_は、現在使用中のテーマの属性を指します。
これで、上記の2つのテーマをアプリケーションに使用できます。
_<application Android:theme="@style/CustomTheme">
_
または
_<application Android:theme="@style/CustomTheme.Light">
_
対応するリソースがそれに応じて使用されます。
テーマは、アクティビティのonCreate()
の最初に設定することで、コードに適用することもできます。
[〜#〜]更新[〜#〜]
コードからこれらのテーマに依存するリソースにアクセスする方法は、 この回答 で説明されています。