单击时更改底部导航图标



我想将用户在底部导航中单击的图标更改为另一个图标,以向用户显示他所在的当前片段。我在网上发现了类似的问题和答案,但没有一个对我有效,我不知道我的代码有什么不同。

我做的第一件事就是创建一个类似的选择器

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

然后我用它作为我的图标,就像这个

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/navigation_request"
android:icon="@drawable/requests"
android:title="@string/title_requests"
/>
<!--just here for test-->
<item
android:id="@+id/navigation_chat"
android:icon="@drawable/chat_selector"
android:title="@string/title_chat"
/>
<item
android:id="@+id/navigation_groups"
android:icon="@drawable/ic_group_24dp"
android:title="@string/title_groups"
/>
<item
android:id="@+id/navigation_friends"
android:icon="@drawable/friends"
android:title="@string/title_friends"
/>
</menu>

但当我在设备上运行代码时,它没有任何效果。

这是我的BottomNavigation

<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:labelVisibilityMode="unlabeled"
android:layout_alignParentBottom="true"
app:itemBackground="@color/white"
app:menu="@menu/navigation" />

这是我在活动中处理点击的地方

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= item -> {
Fragment fragment;

switch (item.getItemId()) {
case R.id.navigation_request:
getSupportActionBar().setTitle("Request");
loadFragment(requestFragment);
return true;
case R.id.navigation_chat:
// toolbar.setTitle("Chat");
getSupportActionBar().setTitle("Chat");
loadFragment(chatsFragment);
return true;
case R.id.navigation_friends:
// toolbar.setTitle("Friends");
getSupportActionBar().setTitle("Friends");
loadFragment(friendsFragment);
return true;
case R.id.navigation_groups:
// toolbar.setTitle("Chat");
getSupportActionBar().setTitle("My Groups");
loadFragment(groupsFragment);
return true;
default:
return false;
}
};

在res 中创建颜色文件夹

res -> Android Resource Directory -> color

创建颜色选择器:navigation_state.xml

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

设置项目图标色调和文本颜色。

<com.google.android.material.bottomnavigation.BottomNavigationView
//***
app:itemIconTint="@color/navigation_state"
app:itemTextColor="@color/navigation_state"
//***
/>

我使用了材料设计。无关紧要

最新更新