Android底部导航更改文字&项目选择上的图标色调

时间:2017-05-16 10:45:25

标签: android bottomnavigationview

我最近探索了Android的BottomNavigationView组件。我有4个菜单项,目前我的BottomNavigationView配置如下所示:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/activity_product_details_bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/menu_select_deselect"
    app:itemTextColor="@color/menu_select_deselect"
    app:menu="@menu/menu_product_details"/>

我想要的是所选元素的区别颜色&amp;那个被取消选择的人。我还创建了位于res / color目录下名为menu_select_deselect.xml的Color状态列表文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/white" android:state_checked="true"/>
    <item android:color="@color/tint_color_deselected"/>
</selector>

menu_product_details.xml如下

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/menu_product_details_home"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_home"
    android:title="@string/menu_product_details_home" />

<item
    android:id="@+id/menu_product_details_product_documents"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_documents"
    android:title="@string/menu_product_details_product_documents" />

<item
    android:id="@+id/menu_product_details_product_part_list"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_part_list"
    android:title="@string/menu_product_details_product_part_list" />

<item
    android:id="@+id/menu_product_details_product_service"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_service"
    android:title="@string/menu_product_details_product_service" />
</menu>

任何人都可以帮我解决代码有什么问题,因为即使我点击其他3个项目,只有第一个元素以白色显示?

4 个答案:

答案 0 :(得分:3)

回答我自己的问题,我的代码中的错误是替换下面提到的onNavigationItemSelected()中的返回值,之前我返回false,而期望是返回true,它可能对某人有帮助。

 bottomNavigation.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
 @Override
 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
  switch (item.getItemId()) {
   case R.id.menu_product_details_home:
    break;
   case R.id.menu_product_details_product_documents:
    break;
   case R.id.menu_product_details_product_part_list:
    break;
   case R.id.menu_product_details_product_service:
    break;
  }
  return true;
 }
});

答案 1 :(得分:1)

您可以通过添加

来更改选择/取消选择的图标和文本的色调颜色
app:itemIconTint=""
app:itemTextColor=""

这些是BottomNavigationView的2个属性,您可以通过在其中添加drawable选择器在xml中设置它。

但是如果您想更改所选项目的图标而不仅仅是颜色,那么我会为您提供不同的解决方案。删除

app:itemIconTint=""
从您的BottomNavigationView xml文件

并将以下行添加到您可以使用BottomNavigationView的类中:

bottomNavigationView.setItemIconTintList(null);

这将禁用所选项目图标的颜色色调效果,并根据您的选择器drawable更改图标。

我遇到了同样的问题。我已经添加了选择器drawable,用于在选中/选中时更改BottomNavigationView项目的图标。每个项目的drawable选择器都会添加到BottomNavigationView的菜单文件中作为图标。

答案 2 :(得分:0)

在引用drawable时使用 @drawable 而不是@color

<android.support.design.widget.BottomNavigationView
    android:id="@+id/activity_product_details_bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/menu_select_deselect"
    app:itemTextColor="@drawable/menu_select_deselect"
    app:menu="@menu/menu_product_details"/>

答案 3 :(得分:0)

更改您的选择器文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<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>

并且是参考@drawable而不是@color