修改或者替换Toolbar右侧更多按钮(三个点)

问题:项目中需要将一些页面中toolbar的快捷菜单的更多按钮由白色改为黑色,从网上搜过一些,大多是通过修改theme实现,例如Material Design主题与ToolBar讲解,由于需要修改的页面继承的父类是位于framework中,其他项目也有使用,不可以修改父类中的theme。并且如果单纯修改theme中的colorControlNormal颜色,会修改一些按钮的默认显示颜色,不满足需求。
解决方案:通过替换三个点的更多按钮图标来达到修改颜色的需求。
最终通过以下方式实现:

    /**
     * 设置更多按钮的颜色
     * @param toolbar
     * @param colorId
     */
    public static void setToolbarMoreIconCustomColor(Toolbar toolbar, int colorId) {
        if(toolbar == null) {
            return;
        }
        Drawable moreIcon = ContextCompat.getDrawable(toolbar.getContext(), R.drawable.abc_ic_menu_overflow_material);
        if(moreIcon != null) {
            moreIcon.setColorFilter(ContextCompat.getColor(toolbar.getContext(), colorId), PorterDuff.Mode.SRC_ATOP);
            toolbar.setOverflowIcon(moreIcon);
        }
    }

其中R.drawable.abc_ic_menu_overflow_material指向的就是三个点的图标

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0"
        android:tint="?attr/colorControlNormal">
    <path
            android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2c-1.1,0 -2,0.9 -2,2S10.9,8 12,8zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,10 12,10zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,16 12,16z"
            android:fillColor="@android:color/white"/>
</vector>

只不过其fillColor是白色而已,我们只要修改其颜色为我们想要的颜色即可,所以就有了上面的代码逻辑

moreIcon.setColorFilter(ContextCompat.getColor(toolbar.getContext(), colorId), PorterDuff.Mode.SRC_ATOP);
toolbar.setOverflowIcon(moreIcon);

最终效果如下:
在这里插入图片描述
这就达到了,通过修改更多按钮图标达到修改颜色的需求了。
参考文章:
1、ToolBar和ActionBar右边三个点的图标替换
2、Android修改ToolBar的返回按钮颜色

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值