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)之前的平台tint只能处理简单的单色值,并且使用ColorStateList
(<selector>
)资源值会导致抛出异常。如果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,则只需要关注上面的注意事项。
<item name="tint">
和<item name="android:tint">
的示例,但是第一个示例中仅使用<item name="tint">
就可以正常工作!谢谢 Mike! - Andrew Leader