大家好,欢迎来到IT知识分享网。
问题:项目中需要将一些页面中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的返回按钮颜色
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/26536.html