BottomNavigationView - 所选项目的文字颜色

时间:2017-05-25 13:12:49

标签: android menuitem textcolor bottomnavigationview

我尝试设置底部导航项的文本颜色。 This guide表示有一个名为setSelectedItemId的函数以编程方式设置所选项。但它需要25.3.0支持库,我使用25.0.0。所以我使用下面的代码来设置所选项目:

Menu menu = bottomNavigationView.getMenu();
menu.getItem(selectedIndex).setChecked(true);
menu.getItem(currentIndex).setChecked(false);
currentIndex = selectedIndex;

我的颜色设置在这里:

        int[] colors = new int[] {
                Color.BLACK,
                Color.GREEN,
                Color.BLUE,
                Color.RED
        };
        int [][] states = new int [][]{
                new int[] { android.R.attr.state_enabled, -android.R.attr.state_pressed, -android.R.attr.state_selected}, // enabled
                new int[] {-android.R.attr.state_enabled}, // disabled
                new int[] {android.R.attr.state_enabled, android.R.attr.state_selected}, // selected
                new int[] {android.R.attr.state_enabled, android.R.attr.state_pressed}  // pressed
        };
        bottomNavigationView.setItemTextColor(new ColorStateList(states, colors));

我无法看到所选的文字颜色。当我按下项目时,项目文本颜色为红色。我希望按下后项目文本颜色为蓝色(因为我认为它的状态已被选中。)

1 个答案:

答案 0 :(得分:1)

此解决方案对我有用。但是在我的情况下,我仅使用两种颜色。 但基本上

  

android.R.attr.state_pressed

仅在按下时设置颜色

  

android.R.attr.state_checked

将在您停止按下按钮后设置颜色。

int[] colors = new int[] {
    Color.BLACK,
    Color.GREEN,
};

int [][] states = new int [][]{
    new int[] { android.R.attr.state_enabled, -android.R.attr.state_checked},
    new int[] {android.R.attr.state_enabled, android.R.attr.state_checked}
};

bottomNavigation.setItemTextColor(new ColorStateList(states, colors));
bottomNavigation.setItemIconTintList(new ColorStateList(states, colors));