android,NavigationView的setItemTextColor和setItemIconTinList都没有效果

时间:2015-10-13 23:18:36

标签: java android android-navigationview

抱歉我的英文。

我需要动态设置NavigationView的项目文本和项目图标颜色,但由于某种原因这不起作用。

这将是一个错误或我做错了什么? XML工作得很好,但是当我做以下事情时,不是:

我的代码:

navigationView = (NavigationView) findViewById(R.id.nav_view);

        int[][] states = new int[][] {
                new int[] {  }, // default
                new int[] { android.R.attr.state_focused, android.R.attr.state_pressed },  // pressed
                new int[] { android.R.attr.state_selected } // selected
        };

        int[] colors = new int[] {
                colorDefault,
                colorFocused,
                colorSelected
        };

        ColorStateList myList = new ColorStateList(states, colors);
        navigationView.setItemTextColor(myList);
        navigationView.setItemIconTintList(myList);

出于某种原因,我只得到第一种颜色:(

2 个答案:

答案 0 :(得分:1)

int[][] states = new int[][] {
            new int[] { android.R.attr.state_selected } // selected               
            new int[] {  } // default
    };

int[] colors = new int[] {
        colorSelected,            
        colorDefault
};
ColorStateList colorList = new ColorStateList(states, colors);
navigationView.setItemTextColor(colorList);

仅使用选择的内容和导航文本状态的默认值。正如Matei说的。您需要按照最具体的情况使用。

答案 1 :(得分:0)

它就像捕捉异常一样:你需要从最具体的案例开始,然后再考虑更一般的案例。在你的情况下,它将是:

 int[][] states = new int[][] {
            new int[] { android.R.attr.state_selected } // selected
            new int[] { android.R.attr.state_focused, android.R.attr.state_pressed },  // pressed
            new int[] {  }, // default
    };

int[] colors = new int[] {
        colorSelected,
        colorFocused,
        colorDefault
};

这对你有用吗?