2017-08-28 1 views
2

中: Toolbar icon tinting on Android色合いナビゲーションアイコンすでにここのように、数回に覆われているメニューアイコンを色付けする方法ツールバー

は、さらにこの溶液に、まだナビゲーションアイコンの問題があります。 がツールバーにテーマ(オーバーレイ)を適用することは単なるテキストやホワイトリストのアイコンを濃淡(参照:https://stackoverflow.com/a/26817918/2417724)を

を使用すると、ケースは非常に簡単であることを起こるカスタムアイコンを(設定した場合、あなたがあればそれを変更する必要があるとして、デフォルトの戻る矢印を表示したくない場合)、このカスタムアイコンは色づけされません。

どのようにアイコンを操作しますか? 私のすべてのアイコンはデフォルトの黒色で表示されていますので、ツールバーで使用するために特別な白いバージョンを使用したくありません。

答えて

3

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属性を使用する必要があります。

残念ながら、これは別の漁獲につながる、という点で、ロリポップする前に、プラットフォームの色合い(APIレベル21)は、単純な、単一の色値を扱うことができ、かつColorStateList<selector>)リソース値がExceptionがスローされます使用して。これは、android:tintの値が単純な色であれば問題はありませんが、別のテーマの色属性と一致するようにナビゲーションアイコンの色合いを調整することが望ましい場合があります(ColorStateList)。この場合、android:tintの単純なカラー値をres/values/に指定して、res/values/res/values-21/に別のスタイルを作成する必要があります。

例えば、着色は、テーマの主なテキストの色と一致する場合:

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未満のサポートライブラリバージョンを使用してスタックされています。

関連する問題