如何更改bottomnavigationview的非活动图标

bxgwgixi  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(402)

我有四个bottomnavigationview项,比如a、b、c和d。我有两个图标,应用如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/home_icon" android:state_checked="false"/>
<item android:drawable="@mipmap/home_selected" android:state_checked="true"/>
</selector>

我的菜单.xml

<item
    android:id="@+id/navigation_home"
    android:icon="@drawable/home_selection"
    android:title="@string/title_home" />

我想要的是当我点击c时,a、b和d的图标应该分别变成第三个图标。希望这有意义。有办法做到这一点吗?
也许有办法在selector.xml中添加第三个图标,但我不知道应该应用哪个状态。

fdx2calv

fdx2calv1#

已解决,如果有人有相同的问题,请尝试以下操作:
底部菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/navigation_home"
    android:icon="@drawable/home_selection"
    android:title="@string/title_home" />

<item
    android:id="@+id/navigation_meditate"
    android:icon="@drawable/meditate_selection"
    android:title="@string/title_meditate" />

<item
    android:id="@+id/navigation_sleep"
    android:icon="@drawable/sleep_selection"
    android:title="@string/title_sleep" />
<item
    android:id="@+id/navigation_sounds"
    android:icon="@drawable/sound_selection"
    android:title="@string/title_sounds" />

</menu>

您的bottomnavigationitemlistener应该如下所示:

private final BottomNavigationView.OnNavigationItemSelectedListener 
   mOnNavigationItemSelectedListener
        = item -> {
    switch (item.getItemId()) {

        case R.id.navigation_home:

            navigation.setBackgroundResource(R.color.colorWhite);

            navigation.getMenu().getItem(0).setIcon(R.mipmap.home_selected);                navigation.getMenu().getItem(1).setIcon(R.mipmap.meditate_icon);                navigation.getMenu().getItem(3).setIcon(R.mipmap.songs_icon);
            navigation.setItemTextColor(textColorStatesBlack);

            return true;
        case R.id.navigation_meditate:

           navigation.setBackgroundResource(R.color.colorWhite);
            navigation.getMenu().getItem(0).setIcon(R.mipmap.home_icon);              navigation.getMenu().getItem(1).setIcon(R.mipmap.meditate_selected);                navigation.getMenu().getItem(3).setIcon(R.mipmap.songs_icon);
            navigation.setItemTextColor(textColorStatesBlack);

            return true;
        case R.id.navigation_sleep: 

   navigation.setBackgroundResource(R.color.sleepModeNavColor);               
   navigation.getMenu().getItem(0).setIcon(R.mipmap.home_sleep_icon);            
navigation.getMenu().getItem(1).setIcon(R.mipmap.meditate_sleep_icon);
navigation.getMenu().getItem(3).setIcon(R.mipmap.sounds_sleep_icon);
            navigation.setItemTextColor(textColorStatesSleep);

            return true;
        case R.id.navigation_sounds:
        navigation.setItemTextColor(textColorStatesBlack);
        navigation.getMenu().getItem(0).setIcon(R.mipmap.home_icon);                
    navigation.getMenu().getItem(1).setIcon(R.mipmap.meditate_icon);             
    navigation.getMenu().getItem(3).setIcon(R.mipmap.sound_selected);
            clParent.setBackgroundResource(R.color.colorWhite);
            navigation.setBackgroundResource(R.color.colorWhite);

            return true;
    }

    return false;
};

对于文本颜色:

ColorStateList textColorStatesSleep = new ColorStateList(
        new int[][]{
                new int[]{-android.R.attr.state_checked},
                new int[]{android.R.attr.state_checked}
        },
        new int[]{
                Color.parseColor("#8989bc"),
                Color.parseColor("#8989bc")
        });
ColorStateList textColorStatesBlack = new ColorStateList(
        new int[][]{
                new int[]{-android.R.attr.state_checked},
                new int[]{android.R.attr.state_checked}
        },
        new int[]{
                Color.parseColor("#000000"),
                Color.parseColor("#000000")
        });

在上述场景中,这将非常有效。如果有任何遗漏或不可理解的地方,请在下面进行评论。

相关问题