【问题标题】:How to change INACTIVE icons of BottomNavigationView如何更改 BottomNavigationView 的 INACTIVE 图标
【发布时间】:2020-12-24 14:29:46
【问题描述】:

我有四个 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 中添加第三个图标,但我不知道应该应用哪个状态。

【问题讨论】:

    标签: java android xml android-layout


    【解决方案1】:

    已解决,如果有人遇到同样的问题,试试这个:

    bottom_menu.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")
            });
    

    这将在上述情况下完美运行。如果有任何遗漏或无法理解的地方,请在下方评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2022-10-14
      • 2021-12-26
      • 2021-04-21
      相关资源
      最近更新 更多