Change Toolbar overflow icon color

8 浏览
0 Comments

Change Toolbar overflow icon color

我的Android应用程序中有一个android.support.v7.widget工具栏。这个工具栏的背景颜色是明亮的橙色,最好的颜色应该是白色而不是黑色。

我默认的颜色是黑色而不是白色。由于会与其他内容冲突,几乎不可能覆盖它。我不能将主要文本颜色改为白色!

我已经成功更改了标题颜色。

我现在要寻找的是如何将操作按钮颜色也更改为白色。

我的代码:

主活动:






菜单栏:





样式:





0
0 Comments

问题:如何改变工具栏溢出图标的颜色?

解决方法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

}

0
0 Comments

问题的出现原因:通过定义样式中的`actionOverflowButtonStyle`,来改变Toolbar中溢出菜单图标的颜色。但是,当将`parent`属性设置为`Theme.AppCompat.Light.NoActionBar`时,该方法失效。

解决方法:可以尝试使用`Theme.MaterialComponents.Light.NoActionBar`主题,并将样式应用于整个应用程序。或者,可以参考链接中提供的解决方法,通过定义`colorControlNormal`和`colorControlActivated`来改变溢出菜单图标的颜色。

0
0 Comments

问题的出现原因是无法更改工具栏溢出图标的颜色。解决方法是替换图标本身。

首先,进入`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)

0