active/inactive 时更改菜单项颜色
Change Menu item color when active/inactive
我有 3 个菜单项,想更改它们的样式。
我已将 itemIconTint 和颜色设置为 purple_500,现在所有 items/texts 都是相同的颜色,无论它们是否处于活动状态。
如何以编程方式实现此目的?
这是我的activity_main
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
app:itemIconSize="22dp"
app:menu="@menu/bottom_navigation"
app:itemIconTint="@color/purple_500"
app:itemTextColor="@color/purple_500"/>
bottom_navigation:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_live"
android:icon="@drawable/ic_baseline_live_tv_24"
android:title="@string/LIVE"/>
<item
android:id="@+id/nav_articles"
android:icon="@drawable/ic_outline_article_24"
android:title="@string/news" />
<item
android:id="@+id/nav_notification"
android:icon="@drawable/ic_baseline_notifications_none_24"
android:title="@string/subscribe"/>
</menu>
以及我在 Whosebug 上找到的代码(也许我在这个方面走对了路?)
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_live:
navLive();
return true;
case R.id.nav_articles:
navArticles;
return true;
case R.id.nav_notification:
onMenuItemSelected()
return true;
default:
return: super.onOptionsItemSelected(item);
}
}
您可以使用可绘制对象来实现。
drawable/bottom_tab_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:color="@color/colorActive"
android:state_selected="true"
android:state_checked="true"/>
<item
android:color="@color/colorInactive"/>
</selector>
state_selected
和 state_checked
在活动选项卡的情况下应该为真。
在你的 bottomNavigationView
.
中使用这个 drawable
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_nav_height"
app:itemTextColor="@drawable/bottom_tab_color"
app:itemIconTint="@drawable/bottom_tab_color"
app:menu="@menu/bottom_nav_menu" />
完美运行!
我有 3 个菜单项,想更改它们的样式。
我已将 itemIconTint 和颜色设置为 purple_500,现在所有 items/texts 都是相同的颜色,无论它们是否处于活动状态。
如何以编程方式实现此目的?
这是我的activity_main
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
app:itemIconSize="22dp"
app:menu="@menu/bottom_navigation"
app:itemIconTint="@color/purple_500"
app:itemTextColor="@color/purple_500"/>
bottom_navigation:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_live"
android:icon="@drawable/ic_baseline_live_tv_24"
android:title="@string/LIVE"/>
<item
android:id="@+id/nav_articles"
android:icon="@drawable/ic_outline_article_24"
android:title="@string/news" />
<item
android:id="@+id/nav_notification"
android:icon="@drawable/ic_baseline_notifications_none_24"
android:title="@string/subscribe"/>
</menu>
以及我在 Whosebug 上找到的代码(也许我在这个方面走对了路?)
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_live:
navLive();
return true;
case R.id.nav_articles:
navArticles;
return true;
case R.id.nav_notification:
onMenuItemSelected()
return true;
default:
return: super.onOptionsItemSelected(item);
}
}
您可以使用可绘制对象来实现。
drawable/bottom_tab_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:color="@color/colorActive"
android:state_selected="true"
android:state_checked="true"/>
<item
android:color="@color/colorInactive"/>
</selector>
state_selected
和 state_checked
在活动选项卡的情况下应该为真。
在你的 bottomNavigationView
.
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_nav_height"
app:itemTextColor="@drawable/bottom_tab_color"
app:itemIconTint="@drawable/bottom_tab_color"
app:menu="@menu/bottom_nav_menu" />
完美运行!