我想清除BottomNavigationView的选择,因此将不会选择任何项目。

我有一个辅助实用程序方法:

public static void clearSelection(BottomNavigationView view) {
    final BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
    for (int i = 0; i < menuView.getChildCount(); i++) {
        BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
        item.setChecked(false);
    }
}


这种方法有效,但不会将项目的颜色重置为未选中的颜色(仅删除凸起的动画并标准化字体大小)。

要设置BottomVanigationItemView颜色,我使用颜色选择器,该颜色选择器根据检查状态设置颜色:

<?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/colorPrimaryLight" />

    <item android:color="@color/colorPrimaryLightTransparent" />
</selector>


我试过了:

item.invalidate();
menuView.invalidate();


那没有用。
如何强制视图根据颜色选择器重置颜色值?

最佳答案

通过使所有MenuItems不可检查,然后在NavigationItemSelected上将其再次检查来解决。

public static void setCheckable(BottomNavigationView view, boolean checkable) {
    final Menu menu = view.getMenu();
    for(int i = 0; i < menu.size(); i++) {
        menu.getItem(i).setCheckable(checkable);
    }
}

07-24 09:49
查看更多