2

对不起我的英语不好。

我需要动态设置 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);

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

4

2 回答 2

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

只使用选中的和默认的导航文本状态。正如马太所说。您需要按最具体的情况顺序使用。

于 2019-09-16T16:02:16.117 回答
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
};

那对你有用吗?

于 2015-10-21T10:46:09.320 回答