私は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リソースファイル - > 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 を使用し、非アクティブなタブアイコンの色合いには usesAndroid: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>
yyour_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" />
答えには手遅れですが、誰にとっても役立ちます。私は非常に愚かな間違いをしていた、私はbottom_color_nav.xmlを使用して、色の変更を選択および選択解除した。 BottomNavigationでまだ適切な色が得られない。
それから、私はonNavigationItemSelectedメソッドでfalseが返されたことに気付きました。このメソッドはコードでのみ発行されました。
プログラムでアイコンの色とテキストの色を変更する場合は、次の手順を実行します。
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);
これは動作します:
setItemBackgroundResource(Android.R.color.holo_red_light)
セレクタ項目の属性にAndroid:state_enabled
ではなくAndroid:state_selected
を使用してみてください。