android更改menu字体颜色,Android动态修改menu颜色

昨晚有人在群里问怎么动态修改menu的颜色

关键对方还说在网上百度了3个小时了,依然没有解决问题

我知道,轮到我出手了😀

如果你是复制粘贴党,那么下面的代码拿走即可👇

@Override

public boolean onOptionsItemSelected(@NonNull MenuItem item) {

int itemId = item.getItemId();

for (int i = 0; i < toolBar.getChildCount(); i++) {

View childAt = toolBar.getChildAt(i);

if (childAt instanceof ActionMenuView) {

ActionMenuView itemView = (ActionMenuView) childAt;

for (int j = 0; j < itemView.getChildCount(); j++) {

ActionMenuItemView menuItemView = (ActionMenuItemView) itemView.getChildAt(j);

int id = menuItemView.getId();

if (itemId==id){

menuItemView.setTextColor(Color.BLUE);

}else {

menuItemView.setTextColor(Color.BLACK);

}

}

}

}

return super.onOptionsItemSelected(item);

}

如果你还想学习一点东西,可以从这里往下看

其实很简单

当时我也从网上随便搜索了一下,凭感觉没有发现比较靠谱的方案。只好自己去翻源码

我本来的思路是通过反射来更改文字颜色,但是在翻源码的过程中我发现如果我要精确的找到那个textView,这个工作量有点大了。

后来就想着,我只要搞清楚toolBar中的树形结构,然后找到显示menu文字的textView就行了。

既然要找toolBar的树形结构,那么遍历toolBar是最好的选择

在遍历过程中找到textView或者其子类,然后去改变文字的颜色,看看有没有效果。

省时省力省心。

代码遂成!

question:如果我们想默认选中某个menu,该怎么办捏?

福利代码,拿走不谢👇

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

Log.d(TAG, "onPrepareOptionsMenu: ");

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

for (int i = 0; i < toolBar.getChildCount(); i++) {

View childAt = toolBar.getChildAt(i);

if (childAt instanceof ActionMenuView) {

ActionMenuView itemView = (ActionMenuView) childAt;

for (int j = 0; j < itemView.getChildCount(); j++) {

ActionMenuItemView menuItemView = (ActionMenuItemView) itemView.getChildAt(j);

int id = menuItemView.getId();

if (id==R.id.menu_manage){

menuItemView.setTextColor(Color.BLUE);

}

}

}

}

}

}, 100);

return super.onPrepareOptionsMenu(menu);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值