如何使用 ColorStateList 更改特定元素 BottomNavigationView 的颜色?
How to change the color of a specific element BottomNavigationView using ColorStateList?
尝试为默认的 BottomNavigationView 两种颜色(针对菜单项的两种状态)添加第三种条件和第三种颜色。为此,在 drawable 中创建了一个文件 "bottom_nav_colors.xml",选择器为:
<?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/colorPrimaryDark"/>
<item android:state_activated="true"
android:color = "@color/colorAccent"/>
<item android:color = "@color/colorGray" />
</selector >
布局模板文件"activity_main.xml"指出:
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation_menu"
app:itemIconTint="@drawable/bottom_nav_colors"
app:itemTextColor="@drawable/bottom_nav_colors"/>
但是,我无法弄清楚 class "BottomNavigationView" 的方法是 class "MainActivity.java"(继承自 class "MvpAppCompatActivity" ) 为我的菜单项将其激活为 "activated"(或列表中的任何其他项:"accelerated"、"active" 等)。
或者如果你做不到,那怎么办?
唉,"BottomNavigationView"这一招不行。但是如果你从here中使用他的继承人,这一切都很容易完成:
if (ServiceApp.getCartsGoodsNumber() > 0) {
bnve.getBottomNavigationItemView(i).setIconTintList(
ContextCompat.getColorStateList(
bnve.getContext(),
color.bottom_select_nav_colors));
addBadgeAt(bnve, i, ServiceApp.getCartsGoodsNumber());
} else {
bnve.getBottomNavigationItemView(i).setIconTintList(null);
if (mNavigation_20Badge != null) mNavigation_20Badge.hide(true);
}
这里有一个 class "BottomNavigationViewExe" 的实例,方法 addBadgeAt() 如下所示:
private void addBadgeAt(BottomNavigationViewEx bnve,
final int position, final int number) {
// add badge
mNavigation_20Badge = new QBadgeView(bnve.getContext())
.setBadgeNumber(number).setGravityOffset(12, 2, true)
.bindTarget(bnve.getBottomNavigationItemView(position));
}
此方法可让您添加徽章图标:
enter image description here
尝试为默认的 BottomNavigationView 两种颜色(针对菜单项的两种状态)添加第三种条件和第三种颜色。为此,在 drawable 中创建了一个文件 "bottom_nav_colors.xml",选择器为:
<?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/colorPrimaryDark"/>
<item android:state_activated="true"
android:color = "@color/colorAccent"/>
<item android:color = "@color/colorGray" />
</selector >
布局模板文件"activity_main.xml"指出:
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation_menu"
app:itemIconTint="@drawable/bottom_nav_colors"
app:itemTextColor="@drawable/bottom_nav_colors"/>
但是,我无法弄清楚 class "BottomNavigationView" 的方法是 class "MainActivity.java"(继承自 class "MvpAppCompatActivity" ) 为我的菜单项将其激活为 "activated"(或列表中的任何其他项:"accelerated"、"active" 等)。
或者如果你做不到,那怎么办?
唉,"BottomNavigationView"这一招不行。但是如果你从here中使用他的继承人,这一切都很容易完成:
if (ServiceApp.getCartsGoodsNumber() > 0) {
bnve.getBottomNavigationItemView(i).setIconTintList(
ContextCompat.getColorStateList(
bnve.getContext(),
color.bottom_select_nav_colors));
addBadgeAt(bnve, i, ServiceApp.getCartsGoodsNumber());
} else {
bnve.getBottomNavigationItemView(i).setIconTintList(null);
if (mNavigation_20Badge != null) mNavigation_20Badge.hide(true);
}
这里有一个 class "BottomNavigationViewExe" 的实例,方法 addBadgeAt() 如下所示:
private void addBadgeAt(BottomNavigationViewEx bnve,
final int position, final int number) {
// add badge
mNavigation_20Badge = new QBadgeView(bnve.getContext())
.setBadgeNumber(number).setGravityOffset(12, 2, true)
.bindTarget(bnve.getBottomNavigationItemView(position));
}
此方法可让您添加徽章图标:
enter image description here