2017-08-28 121 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的支持库版本卡住。