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

igsr9ssn  于 2023-03-21  发布在  Android
关注(0)|答案(2)|浏览(403)

我知道我们可以通过this方式从XML设置底部导航选择颜色
但我想知道如何从我的Activity以编程方式更改它?
这是我在Activity的OnNavigationItemSelectedListener中尝试的。

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

但它对我不起作用。任何关于如何以编程方式更改它的想法或参考链接对我都很有帮助。
注意:我只想更改所选项的图标和文本色调,而不是底部导航栏中的所有项目。
先谢了。

bttbmeg0

bttbmeg01#

您可以用途:

bottomNavigationView.setItemIconTintList(....)

并使用选择器(不是单色):

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

gzjq41n42#

以下是@加布里埃尔在Kotlin的回答:

val states = arrayOf(
                intArrayOf(android.R.attr.state_checked),
                intArrayOf()
            )
    
val colors = intArrayOf(
                selectedColor,
                unselectedColor
            )

val myColorStateList = ColorStateList(states, colors)
bottomNavigationView.itemIconTintList = myColorList
bottomNavigationView.itemTextColor = myColorList

相关问题