我正在为一个项目添加一个BottomNavigationView
,我想为所选标签添加不同的文本(和图标色调)颜色(以实现灰色非选定标签效果)。在颜色选择器资源文件中使用与android:state_selected="true"
不同的颜色似乎不起作用。我还尝试使用android:state_focused="true"
或android:state_enabled="true"
添加其他项目条目,遗憾的是没有效果。还尝试将state_selected
属性设置为false(显式)为默认(未选中)颜色,没有运气。
以下是我将视图添加到布局的方法:
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/silver"
app:itemIconTint="@color/bnv_tab_item_foreground"
app:itemTextColor="@color/bnv_tab_item_foreground"
app:menu="@menu/bottom_nav_bar_menu" />
这是我的颜色选择器(bnv_tab_item_foreground.xml
):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/darker_gray" />
<item android:state_selected="true" android:color="@android:color/holo_blue_dark" />
</selector>
我的菜单资源(bottom_nav_bar_menu.xml
):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_home"
android:icon="@drawable/ic_local_taxi_black_24dp"
android:title="@string/home" />
<item
android:id="@+id/action_rides"
android:icon="@drawable/ic_local_airport_black_24dp"
android:title="@string/rides"/>
<item
android:id="@+id/action_cafes"
android:icon="@drawable/ic_local_cafe_black_24dp"
android:title="@string/cafes"/>
<item
android:id="@+id/action_hotels"
android:icon="@drawable/ic_local_hotel_black_24dp"
android:title="@string/hotels"/>
</menu>
我将不胜感激任何帮助。
在制作selector
时,始终保持默认状态,否则只使用默认状态。您需要将选择器中的项目重新排序为:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@android:color/holo_blue_dark" />
<item android:color="@android:color/darker_gray" />
</selector>
与BottomNavigationBar
一起使用的州是state_checked
而不是state_selected
。
1.在res里面创建名称颜色的文件夹(如drawable)
2.右键单击颜色文件夹。选择new-> color resource file-> create color.xml文件(bnv_tab_item_foreground)(图1:文件结构)
3.复制并粘贴bnv_tab_item_foreground
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
app:itemBackground="@color/appcolor"//diffrent color
app:itemIconTint="@color/bnv_tab_item_foreground" //inside folder 2 diff colors
app:itemTextColor="@color/bnv_tab_item_foreground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
bnv_tab_item_foreground:
<?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/white" />
<item android:color="@android:color/darker_gray" />
</selector>
图1:文件结构:
BottomNavigationView
使用来自应用于所选选项卡的主题的colorPrimary,并使用uses android:textColorSecondary
作为非活动选项卡图标色调。
因此,您可以使用首选主色创建样式,并将其设置为xml布局文件中qazxsw poi的主题。
styles.xml:
BottomNavigationView
your_layout.xml:
<style name="BottomNavigationTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/active_tab_color</item>
<item name="android:textColorSecondary">@color/inactive_tab_color</item>
</style>
尝试使用<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
android:theme="@style/BottomNavigationTheme"
app:menu="@menu/navigation" />
而不是android:state_enabled
作为选择器项属性。
如果要以编程方式更改图标和文本的颜色:
android:state_selected
这将有效:
ColorStateList iconsColorStates = new ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_checked}
},
new int[]{
Color.parseColor("#123456"),
Color.parseColor("#654321")
});
ColorStateList textColorStates = new ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_checked}
},
new int[]{
Color.parseColor("#123456"),
Color.parseColor("#654321")
});
navigation.setItemIconTintList(iconsColorStates);
navigation.setItemTextColor(textColorStates);
答案为时已晚,但对任何人都有帮助。我犯了一个非常愚蠢的错误,我使用bottom_color_nav.xml进行选择并取消选择颜色变化。还是没有在BottomNavigation中获得正确的颜色。
然后我意识到,我在onNavigationItemSelected方法中返回false,该方法只发布了我的代码。