android - Android - 在底部导航视图中,选中选项卡的颜色

71 6

我正在向项目添加一个BottomNavigationView,并且希望为选定的选项卡(实现灰色非选定标签效果)提供不同的文本(图标着色)颜色,在颜色选择器资源文件中使用与android:state_selected= "true"不同的颜色似乎不工作,我还尝试使用android:state_focused= "true"或android:state_enabled= "true"附加项目,但是,没有效果,还尝试将state_selected属性设置为默认(non-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>



我将不胜感激任何的帮助。

时间: 原作者:

120 1

创建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

原作者:
145 5

1.res里创建带有颜色名称(像drawable一样)的文件夹,

2.右键单击颜色文件夹,选择new-文件结构)

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>



Figure 1: File Structure

原作者:
148 4

BottomNavigationView使用应用于选定选项卡的主题的colorPrimary,并且它使用 android:textColorSecondary为非活动选项卡图标颜色使用。

因此,你可以创建具有首选主颜色的样式,并将它设置为xml布局文件中的BottomNavigationView主题。

styles.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>



your_layout.xml:

 

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



原作者:
146 2

尝试使用android:state_enabled而不是android:state_selected作为选择器项属性。

原作者:
138 5

如果你要以编程方式更改图标和文本的颜色:

 

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);



原作者:
140 4

这可以工作:

 

setItemBackgroundResource(android.R.color.holo_red_light)



原作者:
...