底部导航栏-更改选项卡图标颜色

26

我在我的应用中集成了底部导航栏。但是当我滑动时,选项卡的颜色并不会改变。很奇怪,因为我有选择器文件。有什么解决这个问题的想法吗?

Activity.java

BottomNavigationView bottomNavigationView = (BottomNavigationView)
            findViewById(R.id.bottom_navigation);


    bottomNavigationView.setOnNavigationItemSelectedListener(
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.bb_menu_arac:
                            fragment = new AraclarimFragment();
                            break;
                        case R.id.bb_menu_yaklasan:
                            fragment = new YaklasanlarFragment();
                            break;
                        case R.id.bb_menu_yakin:
                            fragment = new Yakinimdakiler();
                            break;

                    }
                    final FragmentTransaction transaction = fragmentManager.beginTransaction();
                    transaction.replace(R.id.main_container, fragment).commit();
                    return true;
                }


            });

选择器.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/beyaz" android:state_enabled="true" />
<item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>

activity.xml

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/beyaz"
    app:itemTextColor="@color/beyaz"
    app:menu="@menu/bottombar_menu" />

你在哪里使用了 selector.xml? - Anurag Singh
你在代码中写的是 androida:state_enabled 而不是 android:state_enabled?这会造成问题吗? - Queendevelopers
@AnuragSingh 实际上,我不知道在哪里使用或调用selector.xml。 - Yunus Haznedar
@YunusHaznedar,您想要更改所选项目的文本颜色还是所选项目的背景? - Queendevelopers
5个回答

61

将其更改为app:itemIconTint="@drawable/selector"

同时将您的selector.xml更改为以下内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/beyaz" />
<item android:color="@color/colorPrimaryDark"  />
</selector>

android:color 改为 android:drawable 对我来说是关键。 - MHSaffari

10

尽管我已经阅读了所有答案,但整个过程还是让我感到困惑,因此我一步一步解决了这个问题,以便初学者可以正确理解它。

假设您创建了带有底部导航栏的MainActivity

在您的 drawable 文件夹中创建 bottom_navigation_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:color="@color/yourSelectedColor" />
  <item android:color="@color/defaultColor"  />
</selector>

然后进入 activity_main.xml 布局,在 BottomNavigationView 中添加以下代码行:

app:itemIconTint="@drawable/bottom_navigation_selector"

如果您也想相应地更改文本颜色,则需要添加这行代码。
app:itemTextColor="@drawable/bottom_navigation_selector"
    

4
您需要将 BottomNavigationView 的选择器设置为 itemIconTint 。类似于:
 <android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/selector"
    app:itemTextColor="@color/beyaz"
    app:menu="@menu/bottombar_menu" />

1
只需添加: item.setChecked(true); 在每个 case 内;

1

我采用了@Anurag Singh的方式,但直到我删除了这一行代码才成功:

navigation?.itemIconTintList = null

感谢自己。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接