2017-08-28 125 views
2

如何色調菜單圖標已經覆蓋了幾次,喜歡這裏: Toolbar icon tinting on Android色調導航圖標在工具欄

此外該解決方案仍有導航圖標的問題。 (請參閱:https://stackoverflow.com/a/26817918/2417724

如果您設置了一個自定義圖標(這種情況很容易出現,因爲您需要更改它if你不想顯示默認後退箭頭),那麼這個自定義圖標不會被着色。

那麼你如何處理你的圖標呢? 我所有的圖標都是默認的黑色,我不想在工具欄中使用特殊的白色版本。

回答

3

可以通過toolbarNavigationButtonStyle屬性對appcompat導航按鈕進行樣式設置,該按鈕只是AppCompatImageButtonAppCompat主題中的默認樣式爲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。在這種情況下,需要在res/values/res/values-21/中創建單獨的樣式,並在res/values/中指定android:tint的簡單顏色值。

例如,如果着色,以配合主題的主要文本顏色:

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的支持庫版本卡住。