2017-05-16 2 views
1

Ich habe vor kurzem BottomNavigationView Komponente von Android untersucht. Ich habe 4 Menüpunkte und zur Zeit meine BottomNavigationView Konfiguration sieht wie folgt:Android Bottom Navigation ändern Text & Symbol Farbton auf Artikelauswahl

<android.support.design.widget.BottomNavigationView 
    android:id="@+id/activity_product_details_bottom_navigation_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    app:itemBackground="@color/colorPrimary" 
    app:itemIconTint="@color/menu_select_deselect" 
    app:itemTextColor="@color/menu_select_deselect" 
    app:menu="@menu/menu_product_details"/> 

Was ich will, ist die aufstrebenden Farben für das Element ausgewählt & das jemandes, der abgewählt werden. I Farbe Zustandsliste Datei mit dem Namen menu_select_deselect.xml auch in res/Farb Verzeichnis abgelegt wie folgt erstellt

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:color="@color/white" android:state_checked="true"/> 
    <item android:color="@color/tint_color_deselected"/> 
</selector> 

menu_product_details.xml wie

folgt
<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item 
    android:id="@+id/menu_product_details_home" 
    app:showAsAction="ifRoom" 
    android:enabled="true" 
    android:icon="@drawable/ic_home" 
    android:title="@string/menu_product_details_home" /> 

<item 
    android:id="@+id/menu_product_details_product_documents" 
    app:showAsAction="ifRoom" 
    android:enabled="true" 
    android:icon="@drawable/ic_product_documents" 
    android:title="@string/menu_product_details_product_documents" /> 

<item 
    android:id="@+id/menu_product_details_product_part_list" 
    app:showAsAction="ifRoom" 
    android:enabled="true" 
    android:icon="@drawable/ic_product_part_list" 
    android:title="@string/menu_product_details_product_part_list" /> 

<item 
    android:id="@+id/menu_product_details_product_service" 
    app:showAsAction="ifRoom" 
    android:enabled="true" 
    android:icon="@drawable/ic_product_service" 
    android:title="@string/menu_product_details_product_service" /> 
</menu> 

jemand in mir helfen kann, was mit dem Code ist fehlerhaft , da nur das erste Element in weißer Farbe angezeigt wird, auch wenn ich auf andere 3 Elemente klicke?

+0

Sind alle Elemente in menu_product_details.xml gespeichert android: enabled = "true"? Mit anderen Worten, sind alle Elemente im Menü aktiviert? – Ram

+0

Ja, alle Elemente haben eine Eigenschaft, die auf "true" gesetzt ist. Android: enabled = "true" –

Antwort

0

Während ziehbar Verwendung @drawable und nicht

<android.support.design.widget.BottomNavigationView 
    android:id="@+id/activity_product_details_bottom_navigation_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    app:itemBackground="@color/colorPrimary" 
    app:itemIconTint="@drawable/menu_select_deselect" 
    app:itemTextColor="@drawable/menu_select_deselect" 
    app:menu="@menu/menu_product_details"/> 
+0

Sowohl "@drawable" als auch "@color" funktionieren gut für mich. –

3

meine eigene Frage zu beantworten, die Fehler in meinem Code @Color Bezug war der Rückgabewert in onNavigationItemSelected() erwähnt unten zu ersetzen, früher war ich Rückkehr falsch, während erwartet wurde, dass es wahr ist, könnte es für jemanden hilfreich sein. Dies sind die zwei Eigenschaften von BottomNavigationView

bottomNavigation.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() { 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_product_details_home: 
    break; 
    case R.id.menu_product_details_product_documents: 
    break; 
    case R.id.menu_product_details_product_part_list: 
    break; 
    case R.id.menu_product_details_product_service: 
    break; 
    } 
    return true; 
} 
}); 
0
Change your selector file like below 

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@color/white" android:state_enabled="true" /> 
    <item android:color="@color/colorPrimaryDark" android:state_enabled="false" /> 
</selector> 

and yes reference @drawable instead of @color 
+0

Dies ist falsch, es sollte State_checked nicht State_enabled sein – Kubicko

0

Sie können Bild und Text der Farbton Farbe wählen ändern/deaktivieren von

app:itemIconTint="" 
app:itemTextColor="" 

hinzufügen und Sie können es in Ihrem xml gesetzt durch Hinzufügen ziehbar Selektoren drin.

Aber wenn Sie möchten Symbol des ausgewählten Elements ändern und nicht nur Farbe, dann habe ich andere Lösung für Sie. Entfernen

app:itemIconTint="" 

von Ihrem BottomNavigationView XML-Datei und fügen Sie Ihre Klasse unterhalb der Linie, wo BottomNavigationView steht zur Verfügung:

bottomNavigationView.setItemIconTintList(null); 

Dieser Farbton Wirkung ausgewählter Artikel Symbol deaktivieren wird und das Symbol ändern, wie pro Ihre Wähler zeichnbar.

Ich hatte das gleiche Problem. Ich habe eine Auswahl hinzugefügt, um das Symbol des BottomNavigationView-Objekts zu ändern, wenn es aktiviert/ausgewählt ist. Der für jedes Element ziehbare Selektor wird in der Menü-Datei von BottomNavigationView als Symbol hinzugefügt.

Verwandte Themen