如何给菜单图标着色已经介绍过几次了,就像这里:Toolbar icon tinting on Android
除了这个解决方案之外,还有导航图标的问题。将主题(叠加)应用到您的屏幕上只会使文本和白名单图标着色(请参阅:https://stackoverflow.com/a/26817918/2417724)
如果你设置了一个自定义图标(这是很容易的情况下,因为你需要改变它,如果你不想显示默认的后退箭头),那么这个自定义图标不会着色。
那你怎么处理你的图标呢?我所有的图标都默认为黑色,我不想有特殊的白色版本,只是为了使用它们在屏幕上。
3条答案
按热度按时间e4eetjau1#
appcompat导航按钮--它只是一个
AppCompatImageButton
--可以通过toolbarNavigationButtonStyle
属性进行样式化。AppCompat
主题中的默认样式是Widget.AppCompat.Toolbar.Button.Navigation
,我们可以扩展该样式以添加tint
属性值。举例来说:使用此方法时需要注意几个注意事项。
在支持库版本25.4.0之前,
AppCompatImageButton
没有提供自己的tint
属性,因此应用命名空间中的tint
属性将不适用(并且不存在,除非在其他地方定义)。如果使用支持库版本25.3.0或更低版本,则必须使用platformandroid:tint
属性。不幸的是,这导致了另一个问题,即Lollipop(API级别21)之前的平台tint只能处理简单的单色值,并且使用
ColorStateList
(<selector>
)资源值将导致抛出Exception
。如果android:tint
值是一个简单的颜色,这不会造成任何问题,但通常需要为导航图标着色以匹配另一个主题颜色属性,该属性很可能是ColorStateList
。在这种情况下,需要在res/values/
和res/values-21/
中创建单独的样式,在res/values/
中为android:tint
指定一个简单的颜色值。例如,如果着色以匹配主题的主要文本颜色:
res/values/styles.xml
res/values-v21/styles.xml
如果您使用的支持库版本低于25.4.0,则只需要关注上面的注解。
lg40wkob2#
要有效地以编程方式设置导航图标的着色颜色,您需要先设置可绘制对象,然后再应用着色。
ca1c2owp3#
你可以试着给图标上色