美文网首页
Android动态修改menu颜色

Android动态修改menu颜色

作者: 王魔王 | 来源:发表于2020-09-12 13:03 被阅读0次

    昨晚有人在群里问怎么动态修改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颜色

          本文链接:https://www.haomeiwen.com/subject/qyrwektx.html