80

我参考这个。单击计划时会出现计划活动,但始终选择第一个项目颜色(收藏夹)。它不会从收藏夹项目颜色更改计划项目颜色。还有,第三项(音乐)。我使用android:state_checked 而不是android:state_enabled。”如果使用 startActivity,它不会从收藏夹项目颜色更改计划项目颜色。如果不是,它会改变颜色。如何解决这个颜色选择问题。

activity_main.xml

app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_navigation_main"

@drawable/nav_item_color_state

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_enabled="true" />
    <item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>
4

7 回答 7

188

在 res 文件夹中创建一个颜色目录并创建您的 xml 文件以自定义您的底部导航项:

res/color/bottom_nav_color.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/your_color" />
     <item android:state_checked="false" android:color="@color/your_color"/>
</selector>

并在您的BottomNavigationView集合app:itemTextColorapp:itemIconTint值中设置为@color/bottom_nav_color

<android.support.design.widget.BottomNavigationView
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/main_navigation"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:background="@color/actionBarColor"
   app:menu="@menu/my_navigation_items"
   app:itemTextColor="@color/bottom_nav_color"
   app:itemIconTint="@color/bottom_nav_color"/>

于 2017-09-28T16:28:17.477 回答
15
  1. 在drawable文件夹中创建一个xml文件,名称为navigation_view_colored.xml并将其放入:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="false" android:color="@color/gray" />
  <item android:state_checked="true" android:color="@color/blue" />
</selector>
  1. 将您创建的 xml 添加到app:itemIconTint
<com.google.android.material.bottomnavigation.BottomNavigationView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottom_navigation"
    android:layout_alignParentBottom="true"
    app:itemIconTint="@drawable/navigation_view_colored"
    app:itemTextColor="@color/blue"
    app:menu="@menu/bottom_navigation"
    android:background="?android:attr/windowBackground"/>
于 2020-04-05T21:47:49.143 回答
7

这是您问题的简单解决方案

<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>

选择器res/drawable/tab_color_selector.xml

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

更新选项卡项选择器颜色您需要什么。

于 2017-02-15T08:49:25.253 回答
6

只是改变theme

创建themes.xmlvalues添加此样式

<style name="BottomNavThem" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimaryRed</item>
</style>

并设置为 BottomNavigationView

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottomNavigationView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menu="@menu/main_navigation_menu"
    android:theme="@style/BottomNavThem"/>
于 2020-06-28T10:21:49.960 回答
4

在我的情况下,我使用了 BottomNavigationBarEx插件。所以,我不得不这样做:

在我的res/layout/layout_navigation_view.xml 中

添加app:itemIconTint="@drawable/bottom_nav_colors". 因为,我只使用图标。因此,如果您有文字,请添加:app:itemTextColor="@drawable/bottom_nav_colors"也。

    <com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bottomNavBar"
        android:background="@drawable/white_grey_border_top"
        app:itemIconTint="@drawable/bottom_nav_colors"
        app:menu="@menu/bottom_navigation_menu" />

然后在res/drawable目录中(因为selectors 需要包含在drawableoranimatable目录中)添加selector(正如其他人提到的):

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

然后在res/values/colors.xml添加您选择取消选择的颜色,例如:

<color name="grey">#bfbfbf</color>
<color name="blue">#3F51B5</color>
于 2019-12-01T11:05:47.003 回答
1

您是否听说过名为 BottomBar of Roughike 的包装器项目,它使 BottomNavigationView 的使用更容易?项目可以在这里找到。

我建议你使用这个项目,它是最新的并且有高水平的贡献。如果您参考使用它,您可以简单地插入以下代码以在单击选项卡时更改颜色并执行更多自定义操作:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
Tab tab = newTab().setIcon(new BitmapDrawable(getResources(), icon)));
tab.getIcon().setColorFilter(Color.parseColor("#7E7E7E"), PorterDuff.Mode.SRC_IN);

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                          @Override public void onTabSelected(TabLayout.Tab tab) {
                            if (tab != null && tab.getIcon() != null) {
                              tab.getIcon().clearColorFilter();
                              }
                          }
                          @Override public void onTabUnselected(TabLayout.Tab tab) {
                            if (tab != null && tab.getIcon() != null) {
                              tab.getIcon()
                                  .setColorFilter(Color.parseColor("#7E7E7E"),
                                      PorterDuff.Mode.SRC_IN);
                            }
                          }
                          @Override public void onTabReselected(TabLayout.Tab tab) {
                          }
                        });
                      }
                    }
                  });

所以基本上我在这里所做的,我为未选择的选项卡#7E7E7E着色并清除选定选项卡的着色过滤器,以便它们以其图标的原始颜色显示。当然,您也可以在选择时填充另一种颜色,这取决于您。

希望这对你有帮助!

干杯,

伦克

于 2017-02-15T08:40:50.040 回答
-1

使用可绘制选择器的其他答案对我不起作用。

<?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/colorPrimary" />
    <item android:color="@color/bottomnavUnselectedColor"  />
</selector>

这在我的情况下有效,删除了state_checked="false"

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomnav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/transparent_rect"
        app:layout_constraintBottom_toBottomOf="parent"
        app:itemIconTint="@drawable/bottomnav_selector"
        app:menu="@menu/bottomnav_menu"/>
于 2021-05-23T03:28:24.970 回答