Ich verwende die neue Android Design Support-Bibliothek, um eine Navigationsleiste in meiner Anwendung zu implementieren.
Ich kann nicht herausfinden, wie ich die Farbe eines ausgewählten Elements ändern kann!
Hier ist die XML des Menüs:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
Und hier ist die Navigationsansicht-XML, die in einem platziert ist android.support.v4.widget.DrawerLayout
:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Danke für Ihre Hilfe !
[BEARBEITEN] Ich habe mir bereits Lösungen wie diese angesehen: Ändern Sie die Hintergrundfarbe des Android-Menüs .
Es scheint ein ziemlicher Hack zu sein und ich dachte, dass mit der neuen Design Support Library etwas Saubereres eingeführt worden wäre?
Antworten:
Nun, Sie können dies mit Color State Resource erreichen . Wenn Sie in Ihrem bemerken, verwenden
NavigationView
SieVerwenden Sie hier anstelle von
@color/black
oder@color/primary_test
aColor State List Resource
. Erstellen Sie dazu zunächst ein neuesxml
Verzeichnis (z. B. drawer_item.xml)color
(das sich imres
Verzeichnis befinden sollte). Wenn Sie noch kein Verzeichnis mit dem Namen habencolor
, erstellen Sie eines.Jetzt drinnen
drawer_item.xml
mach so etwasDer letzte Schritt wäre, Ihre zu ändern
NavigationView
So kann man getrennte Farbe Zustand Ressourcen auflisten verwenden für
IconTint
,ItemTextColor
,ItemBackground
.Wenn Sie nun ein Element als aktiviert (entweder in
xml
oder programmgesteuert) festlegen , hat das jeweilige Element eine andere Farbe als die nicht aktivierten.quelle
Ich glaube
app:itemBackground
erwartet ein Drawable. Befolgen Sie also die folgenden Schritte:Erstellen Sie eine zeichnbare Datei
highlight_color.xml
mit folgenden Inhalten:Erstellen Sie eine weitere zeichnbare Datei
nav_item_drawable.xml
mit folgenden Inhalten:app:itemBackground
Fügen Sie zum Schluss ein Tag in NavView hinzu:Hier definiert die Dateilight_color.xml eine Volltonfarbe, die für den Hintergrund gezeichnet werden kann. Später wird diese Farbe dem Selektor nav_item_drawable.xml zugewiesen.
Das hat bei mir funktioniert. Hoffentlich hilft das.
************************************************** AKTUALISIERT *** ***********************************************
Die oben erwähnte Antwort gibt Ihnen zwar eine genaue Kontrolle über einige Eigenschaften, aber die Art und Weise, wie ich sie beschreiben werde, fühlt sich fester an und ist etwas kühler .
Sie können also ein ThemeOverlay in
styles.xml
der Navigationsansicht wie folgt definieren :Wenden Sie dieses ThemeOverlay nun wie folgt auf das
app:theme
Attribut von NavigationView an:Ich hoffe das wird helfen.
quelle
android:background="@drawable/nav_item_drawable"
für andere Widgets wie RadioButton, Checkbox, Button usw. verwendet werden. Reduziert die Bloatware-Programmierung für die HandhabungsetOnCheckedChangeListener
nur zur Hervorhebung von Farben.NavigateItem
Jedes Mal, wenn auf ein ElementNavigateView
geklickt wird, muss das Kontrollkästchen true gesetzt werdenAdd
NavigationItemSelectedListener
onNavigationView
quelle
setChecked(true)
). Ich kann sehen, dass sich die Farbe des markierten Elements ändert, aber ich kann es nicht selbst ändern. Die Farbe ist immer eine hellere Version des Navigatioview-Hintergrunds.setChecked(true)
aufView
Änderungen Hintergrundfarbe bis zu Thema , das Gerät , das Sie verwendet. Wenn Sie den Hintergrund eines Elements in eine andere Farbe ändern möchten, müssen Sie Ihr Layout inDrawerLayout
oder aufblasenNavigationView
und es selbst handhaben.Hier ist der andere Weg, um dies zu erreichen:
}}
quelle
So können Sie dies in der onCreate-Methode Ihrer Aktivität tun:
quelle
Schritt 1: Erstellen Sie einen aktivierten / nicht aktivierten Selektor:
selector.xml
Schritt 2: Verwenden Sie das XML-Attribut
app:itemTextColor
imNavigationView
Widget, um die Textfarbe auszuwählen.Schritt 3:
Wenn Sie aus irgendeinem Grund auf ein Element im
NavigationView
Menü klicken, wird dies nicht als Schaltflächenprüfung betrachtet. Sie müssen also das ausgewählte Element manuell überprüfen lassen und das zuvor ausgewählte Element löschen. Verwenden Sie dazu den folgenden ListenerSchritt 4:
Um die Symbolfarbe zu ändern, verwenden Sie das
app:iconTint
Attribut in denNavigationView
Menüelementen und stellen Sie denselben Selektor ein.Ergebnis:
quelle