Navigation Drawer Artikel Hintergrundfarbe für die ausgewählten Artikel

? DemandedCross @ | Original: StackOverFlow
---

Ich habe Android Studio zur Umsetzung der Navigation Schublade und ich kann die blaue Farbe, die verwendet wird, um zu zeigen, welcher Abschnitt sind wir derzeit in Änderungen nicht bekommen .

Ich habe zahlreiche Dinge ausprobiert, ich bin derzeit mit einem listSelector das wie folgt aussieht :

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_activated="true" android:drawable="@color/selected" />
    <item android:state_pressed="true" android:drawable="@color/highlight" />


</selector>

Ich habe auch versucht state_checked . state_pressed Funktioniert in dieser Situation, aber die aktuell ausgewählte Element ist immer noch blau.

EDIT: Ich habe dieses weitere Untersuchung und, wenn der Adapter den Kontext, die vergangen ist, wird erstellt getActionBar().getThemedContext(), so denke ich, ob ich die richtige Attribut, um zu meinem Aktionsleiste Stil zuweisen kann ich es von dort zu ändern finden. Ich habe ein paar verschiedene Attribute ohne Glück versucht. Kennt jemand die genaue Attribut ?

Ich habe auch erkannt, wenn ich

<item name="android:activatedBackgroundIndicator">@drawable/nav_listview_selector</item>

im Hauptteil von meinem Thema und Wandel getActionBar().getThemedContext() für getActivity.getBaseContext dann kann ich die Farbe zu ändern, aber ich glaube nicht, das ist der richtige Weg . Ich denke, die Themen- Kontext verwendet werden. Also, wenn jemand weiß, wo der activatedBackgroundIndicator könnte gesetzt werden, so dass sie in verwendet werden getActionBar.getThemedContext()

EDIT2:

So der Text -Ansicht für die Listenansicht verwendet wird, ist eine im SDK sieht das so aus :

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>

Also habe ich versucht Modifikation der "?android:attr/activatedBackgroundIndicator" auf das Thema Niveau, aber es hat keinen Effekt für prüft / ausgewählt / aktiviert aber es funktioniert für gepresst. Weiß jemand, woran das liegt? Und wie kann ich das ändern?

---

Top 5 Antwort

1stan0 @

Neben der Bereitstellung einen eigenen Selektor ziehfähig für die listSelector, sollten Sie auch die Hintergrundressourcedes Listenelements auf eine ähnliche Wahlziehfähig, die verschiedene drawables für die verschiedenen Zustände hat .

2Ripityom @

Verwende ich in der Regel meine benutzerdefinierten Adapter, der einen int- Auswahlfeld hat, und eine setSelection (int) Funktion . Und in der getView Funktion ich den Hintergrund der Darstellung gemäß Position == Auswahl .

3DemandedCross @

Sie sind nicht sicher, warum es ist, dass es nicht funktioniert . Aber die Art, wie ich um ihn herum zu finden ist, meine eigene simple_list_item_activated Layout verwenden, um die Arrayadapter, die im Grunde war die gleiche, außer für die Einstellung der Textfarbe auf Weiß übergeben werden. Ich habe dann mit getActionBar().getThemedContext() ersetzt getActivity().getBaseContext() und es hat jetzt einen Effekt .

Das ist vielleicht nicht der richtige Weg sein und Auswirkungen in der Zukunft haben, aber im Moment habe ich es so funktioniert, wie ich es will .

4Query @
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/list_item_back_pressed" android:state_pressed="true" />
    <item  android:state_activated="true"><color android:color="@color/primary_blue"/></item>
   <item android:drawable="@color/list_item_back_normal"/>

</selector>
5Bhavin Chauhan @

Ich habe zu implementieren Schublade Menü mit benutzerdefinierten Adapterklasse . Vielleicht geschieht es jemand Drawer Liste helfen

<ListView
    android:id="@+id/listview_drawer"
    android:layout_width="260dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/menu_item_color"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:fadingEdge="none"
    />

drawer_list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" 
android:background="@drawable/menu_selector"
>

<ImageView
    android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp"
    android:src="@drawable/ic_menu_home" />

<TextView
    android:id="@+id/lblName"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/imgIcon"
    android:minHeight="48dp"
    android:textColor="@color/menu_txt_color" />

menu_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<!-- selected -->
<item android:drawable="@color/menu_item_active_color" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@color/menu_item_active_color" android:state_pressed="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_activated="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_checked="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_selected="true"/>

<item android:drawable="@color/menu_item_color" android:state_activated="false"/>

Fügen Sie diese auf Element klicken listner der Listenansicht yourlistview.setItemChecked ( Position, true);