Android BottomNavigationView以编程方式设置选定项的背景色

Android BottomNavigationView以编程方式设置选定项的背景色,android,android-bottomnav,Android,Android Bottomnav,我知道我们可以通过以下方式从XML设置底部导航选择颜色 但我想知道如何从我的活动中以编程方式更改它 这就是我在活动的导航项SelectedListener中尝试的内容 item.getIcon().setTint(ContextCompat.getColor(context, R.color.colorBrown)); 还尝试按以下方式更改色调列表: item.setIconTintList(ColorStateList.valueOf(ContextCompat.getColor(cont

我知道我们可以通过以下方式从XML设置底部导航选择颜色

但我想知道如何从我的活动中以编程方式更改它

这就是我在活动的导航项SelectedListener中尝试的内容

 item.getIcon().setTint(ContextCompat.getColor(context, R.color.colorBrown));
还尝试按以下方式更改色调列表:

item.setIconTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.colorPrimaryBlue)));
以下是我的完整代码片段:

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = item -> {
        switch (item.getItemId()) {
            case R.id.navigationTask:
                    item.getIcon().setTint(ContextCompat.getColor(context, R.color.colorBrown));
                fragment = new MyTaskFragment();
                break;
            case R.id.navigationProfile:
                    item.setIconTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.colorPrimaryBlue)));
                fragment = new ProfileFragment();
                break;
            case R.id.navigationRequest:
                fragment = new RequestListFragment();
                break;
            case R.id.navigationMore:
                fragment = new MoreFragment();
                break;
        }
        loadFragment(fragment);
        return true;
    };
但这对我不起作用。任何关于如何以编程方式更改此项的想法或参考链接都将对我有所帮助

注意:我只想更改所选项目的图标和文本色调颜色。不是底部导航中的全部项目

提前感谢。

您可以使用:

bottomNavigationView.setItemIconTintList(....)
并使用选择器(而不是单一颜色):


我试过了,但它影响了底部导航中的所有项目。我只想更改所选颜色。@SnehaMudhigonda发生这种情况是因为您没有使用选择器。是的,我使用了选择器,但如何以编程方式更改这些可绘制颜色?@SnehaMudhigonda在这种情况下,您必须以编程方式构建颜色状态列表。检查更新的答案。使用
setItemTextColor
作为文本颜色,使用
setItemIContentList
作为图标
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="1.0" android:color="@color/..." android:state_checked="true"/> 
  <item android:alpha="0.6" android:color="@color/..."/>
</selector>
    int[][] states = new int[][] {
        new int[] { android.R.attr.state_checked}, // state_checked
        new int[] { }  // 
    };

    int[] colors = new int[] {
        color,
        color2
    };

    ColorStateList myColorList = new ColorStateList(states, colors);
    bottomNavigationView.setItemIconTintList(myColorList);