如何色调菜单图标已经覆盖了几次,喜欢这里: Toolbar icon tinting on Android色调导航图标在工具栏
此外该解决方案仍有导航图标的问题。 (请参阅:https://stackoverflow.com/a/26817918/2417724)
如果您设置了一个自定义图标(这种情况很容易出现,因为您需要更改它if你不想显示默认后退箭头),那么这个自定义图标不会被着色。
那么你如何处理你的图标呢? 我所有的图标都是默认的黑色,我不想在工具栏中使用特殊的白色版本。
如何色调菜单图标已经覆盖了几次,喜欢这里: Toolbar icon tinting on Android色调导航图标在工具栏
此外该解决方案仍有导航图标的问题。 (请参阅:https://stackoverflow.com/a/26817918/2417724)
如果您设置了一个自定义图标(这种情况很容易出现,因为您需要更改它if你不想显示默认后退箭头),那么这个自定义图标不会被着色。
那么你如何处理你的图标呢? 我所有的图标都是默认的黑色,我不想在工具栏中使用特殊的白色版本。
可以通过toolbarNavigationButtonStyle
属性对appcompat导航按钮进行样式设置,该按钮只是AppCompatImageButton
。 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
。在这种情况下,需要在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的支持库版本卡住。