it-swarm.com.de

Die Farbe der ausgewählten Registerkarte in der unteren Navigationsansicht

Ich füge einem Projekt ein BottomNavigationView hinzu und möchte für die ausgewählte Registerkarte eine andere Textfarbe (und eine andere Symbolfarbe) verwenden (um den Effekt "Nicht ausgewählte Registerkarten ausgegraut" zu erzielen). Verwenden einer anderen Farbe mit Android:state_selected="true" in einer Farbauswahl-Ressourcendatei scheint nicht zu funktionieren. Ich habe auch versucht, zusätzliche Artikeleinträge mit Android:state_focused="true" oder Android:state_enabled="true", leider keine Wirkung. Ich habe auch versucht, das state_selected Attribut auf false (explizit) für die Standardfarbe (nicht ausgewählt), ohne Erfolg.

So füge ich die Ansicht meinem Layout hinzu:

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

Hier ist meine Farbauswahl (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>

Und meine Menüressource (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>

Ich würde mich über jede Hilfe freuen.

106

Behalten Sie bei der Erstellung eines selector immer den Standardstatus am Ende bei, da sonst nur der Standardstatus verwendet wird. Sie müssen die Elemente in Ihrer Auswahl neu anordnen als:

<?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>

Und der mit BottomNavigationBar zu verwendende Zustand ist state_checked nicht state_selected.

261
Kamran Ahmed

1. Innerhalb res Ordner mit Namensfarbe erstellen (wie ziehbar)

2. Klicken Sie mit der rechten Maustaste auf den Farbordner. Wählen Sie Neu-> Farbressourcendatei-> Datei color.xml erstellen (bnv_tab_item_foreground) (Abbildung 1: Dateistruktur)

3. Kopieren Sie bnv_tab_item_foreground und fügen Sie es ein

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

Abbildung 1: Dateistruktur:

Figure 1: File Structure

35
Kishore Reddy

BottomNavigationView verwendet colorPrimary aus dem für die ausgewählte Registerkarte angewendeten Thema und verwendetAndroid:textColorSecondary für den inaktiven Tabulatorsymbolfarbton.

Sie können also einen Stil mit der bevorzugten Grundfarbe erstellen und ihn als Thema für Ihr BottomNavigationView in einer XML-Layoutdatei festlegen.

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

Versuchen Sie es mit Android:state_enabled eher, als Android:state_selected für die Selektorelementattribute.

2
Abtin Gramian

Wenn Sie die Farben von Symbolen und Texten programmgesteuert ändern möchten:

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

Für die Antwort ist es zu spät, aber für jeden hilfreich. Ich habe einen sehr dummen Fehler gemacht, ich habe bottom_color_nav.xml zum Auswählen und Abwählen der Farbänderung verwendet. Immer noch nicht die richtige Farbe in BottomNavigation bekommen.

Dann stelle ich fest, dass ich in der onNavigationItemSelected -Methode falsch zurückgegeben wurde, die nur mit meinem Code ausgegeben wurde.

1

Das wird funktionieren:

setItemBackgroundResource(Android.R.color.holo_red_light)
0
KUNAL DAS