メニューアイコンに色を付ける方法は、以下のようにすでに数回説明されています。 Androidのツールバーアイコンの色
このソリューションに加えて、ナビゲーションアイコンの問題がまだあります。ツールバーにテーマ(オーバーレイ)を適用すると、テキストとホワイトリストに登録されたアイコンに色が付きます(参照: https://stackoverflow.com/a/26817918/2417724 )
カスタムアイコンを設定した場合(デフォルトの戻る矢印を表示したくない場合に変更する必要があるため、これは非常に簡単です)、このカスタムアイコンは色が付きません。
次に、アイコンをどのように処理しますか?私のすべてのアイコンはデフォルトでは黒であり、ツールバーでそれらを使用するためだけに特別な白バージョンを使いたくありません。
Appcompatナビゲーションボタン(これは単にAppCompatImageButton
です)は、toolbarNavigationButtonStyle
属性を介してスタイル設定できます。 AppCompat
テーマのデフォルトスタイルはWidget.AppCompat.Toolbar.Button.Navigation
であり、そのスタイルを拡張してtint
属性値を追加できます。例えば:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="toolbarNavigationButtonStyle">@style/Toolbar.Button.Navigation.Tinted</item>
</style>
<style name="Toolbar.Button.Navigation.Tinted" parent="Widget.AppCompat.Toolbar.Button.Navigation">
<item name="tint">@color/nav_button_tint</item>
</style>
この方法を使用する場合は、いくつかの注意点があります。
ライブラリバージョン25.4.0をサポートする前は、AppCompatImageButton
は独自のtint
属性を提供していなかったため、アプリの名前空間のtint
属性は適用されません(そして、他に定義されていない限り、存在する)。サポートライブラリバージョン25.3.0以前を使用する場合は、プラットフォームAndroid:tint
属性を使用する必要があります。
残念ながら、これは別の問題を引き起こします。Lollipop(APIレベル21)より前のプラットフォームの色合いは、単純な単一の色値しか処理できず、ColorStateList
(<selector>
)リソース値を使用すると、スローされるException
Android:tint
の値が単純な色の場合、これは問題になりませんが、ナビゲーションアイコンに別のテーマの色属性(ColorStateList
である可能性が高い)と一致するように色付けしたい場合がよくあります。この場合、res/values/
のres/values-21/
に単純な色の値を指定して、Android:tint
とres/values/
に個別のスタイルを作成する必要があります。
たとえば、テーマのメインのテキストの色と一致するように色を付ける場合:
res/values/styles.xml
<item name="Android:tint">@color/normal_text_color</item>
res/values-v21/styles.xml
<item name="Android:tint">?android:textColorPrimary</item>
25.4.0より前のバージョンのサポートライブラリを使用している場合は、上記の注意事項に注意する必要があります。