Change Toolbar overflow icon color
问题:如何改变工具栏溢出图标的颜色?
解决方法1(使用代码替代XML):
public static boolean colorizeToolbarOverflowButton(Toolbar toolbar, int color) { final Drawable overflowIcon = toolbar.getOverflowIcon(); if (overflowIcon == null) return false; toolbar.setOverflowIcon(getTintedDrawable(toolbar.getContext(), overflowIcon, toolbarIconsColor)); return true; } public static Drawable getTintedDrawable(Context context, Drawable inputDrawable, int color) { Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); DrawableCompat.setTint(wrapDrawable, color); DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN); return wrapDrawable; }
解决方法2(如果不想使用着色的可绘制对象):
public static boolean colorizeToolbarOverflowButton(Toolbar toolbar, Integer color) { final Drawable overflowIcon = toolbar.getOverflowIcon(); if (overflowIcon == null) return false; final PorterDuffColorFilter colorFilter = toolbarIconsColor == null ? null : new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.MULTIPLY); overflowIcon.setColorFilter(colorFilter); return true; }
此外,如果您希望着色操作项和导航按钮的图标,可以尝试以下方法:
fun colorizeToolbarActionItemsAndNavButton(toolbarView: Toolbar, toolbarIconsColor: Int?) {
val colorFilter = if (toolbarIconsColor == null) null else PorterDuffColorFilter(toolbarIconsColor, Mode.MULTIPLY)
for (i in 0 until toolbarView.childCount) {
val v = toolbarView.getChildAt(i)
if (v is ImageButton) {
v.drawable.mutate().colorFilter = colorFilter
}
if (v is ActionMenuView) {
for (j in 0 until v.childCount) {
val innerView = v.getChildAt(j)
if (innerView is ActionMenuItemView) {
val drawablesCount = innerView.compoundDrawables.size
for (k in 0 until drawablesCount) {
if (innerView.compoundDrawables[k] != null) {
innerView.post { innerView.compoundDrawables[k].mutate().colorFilter = colorFilter }
}
}
}
}
}
}
}
用法示例:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
toolbar.doOnPreDraw {
colorizeToolbarActionItemsAndNavButton(toolbar, 0xffff0000.toInt())
}
return true
}
问题的出现原因是无法更改工具栏溢出图标的颜色。解决方法是替换图标本身。
首先,进入`values/styles`目录,在`styles.xml`文件中添加以下内容:
然后,进入`drawable`文件夹,右键点击,选择`New` -> `Vector Asset`。然后点击`Icon`图像,从建议的图标中选择`ic_more_vert_black_24dp`。进行自定义设置,点击`Next` -> `Finish`。然后打开新创建的图标文件,代码如下:
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
将`fillColor`属性更改为所需的颜色。按照第一步中的描述,将此文件放入样式中。
完成!我们的“三个点”的颜色已经改变,不再依赖于基本应用程序样式(结果为#FF2012颜色)。
图片参考:
[![enter image description here](https://i.stack.imgur.com/ZPB3H.png)](https://i.stack.imgur.com/ZPB3H.png)