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);
    }

你可能感兴趣的:(Android动态修改menu颜色)