我最近探索了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个项目,只有第一个元素以白色显示?
答案 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