Navigation Schublade Artikel Hintergrundfarbe für ausgewählte Artikel

Ich habe Android Studio benutzt, um die Navigations-Schublade zu implementieren, und ich kann nicht die blaue Farbe bekommen, die verwendet wird, um zu zeigen, welcher Abschnitt wir gerade sind, um zu ändern.

Ich habe versucht, viele Dinge, ich bin derzeit mit einem listSelector, die aussieht:

  • Push-Benachrichtigungen mit Django und GCM
  • Android: Wie zu vermeiden Header aus Scrollen in Listenansicht, Android?
  • Fortschrittsdialog auf Webview zeigen
  • Überschreibt das native Verhalten bei der Auswahl von Texten auf dem Mobilgerät
  • "Fehler: String-Typen nicht erlaubt (bei 'configChanges' mit Wert 'keyboard | keyboardHidden | orien" ... in AndroidManifest.xml
  • Google Plus-Anmeldung erscheint in einem Dialogfeld "Konto auswählen" zweimal
  • <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 state_checked versucht. state_pressed arbeitet in dieser Situation, aber das aktuell ausgewählte Element ist noch blau.

    EDIT: Ich habe das schon mehr untersucht und wenn der Adapter erstellt wird, ist der Kontext, der übergeben wird, getActionBar().getThemedContext() so dass ich denke, wenn ich das richtige Attribut finden kann, um meinem Actionbar-Stil zuzuordnen, kann ich es ändern von dort. Ich habe ein paar verschiedene Attribute ohne Glück versucht. Kennt jemand das genaue Attribut?

    Ich habe auch erkannt, wenn ich es stelle

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

    Im Hauptteil meines Themas und ändere getActionBar().getThemedContext() für getActivity.getBaseContext dann kann ich die Farbe ändern aber ich glaube nicht, dass dies der richtige Weg ist. Ich denke, der thematische Kontext sollte verwendet werden. Also, wenn jemand weiß, wo die getActionBar.getThemedContext() könnte so gesetzt werden, dass es in getActionBar.getThemedContext()

    EDIT2:

    Also die Textansicht, die für die Listenansicht verwendet wird, ist eine im SDK, die es so aussieht:

     <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, die "?android:attr/activatedBackgroundIndicator" auf der "?android:attr/activatedBackgroundIndicator" modifizieren, aber es hat keine Wirkung für geprüft / ausgewählt / aktiviert, aber es funktioniert für gedrückt. Weiß jemand, warum das so ist? Und wie kann ich das ändern?

  • Kotlin: Iterate durch ein JSONArray
  • GetExternalFilesDir Alternative in Android 2.1
  • Android setX () und setY () verhalten sich seltsam
  • Android-Bildschirm Orientierung: Sperren nur Teile des Layouts
  • Android: wie man das Layout auf den Button klicken kann?
  • Genauigkeit von MediaPlayer.seekTo (int msecs)
  • 12 Solutions collect form web for “Navigation Schublade Artikel Hintergrundfarbe für ausgewählte Artikel”

    Um dieses Problem zu lösen:

    1- Sie brauchen nicht android: listSelector unter deiner ListView.

    2- Öffnen (oder Erstellen) styles.xml unter (res / values).

     <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="android:activatedBackgroundIndicator">@drawable/drawer_list_selector</item> </style> 

    3- Unter res / drawable Ordner erstellen Sie drawer_list_selector.xml Datei

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/light_gray_color" /> <item android:state_activated="true" android:drawable="@drawable/red_color" /> <item android:drawable="@android:color/transparent" /> </selector> 

    4- Unter res / drawable erstellen red_color.xml / light_gray_color.xml (oder einen anderen Namen) und füge deine gewünschte Hex-Farbe hinzu:

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#C8FF0000"/> </shape> 

    5- Öffnen Sie Ihr Projekt AndroidManifest.xml und fügen Sie Android hinzu: Themen-Tag (falls nicht vorhanden)

     <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

    Referenz / Kredit: Ändern der Navigationsschublade Ausgewählte Position Farbe von Standard blau

    Hier ist, wie ich es getan habe und es funktioniert, das kurze Konzept pflegt die Position des ausgewählten Elements im Adapter und ruft notifyDataSetChanged auf calling notifyDatasetChanged die getView Methode wird wieder aufgerufen und in get-Ansicht überprüfen Sie die Position auf der ausgewählten Position ändern Sie die Hintergrundansicht . Hier ist der Code:

    Adapter der NavigationsDracher Listenansicht

     public class MenuAdapter extends BaseAdapter { private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private Context mContext; private String name; private int profile; private int mIcons[]; private int selectedPosition = 0; private String mNavTitles[]; private LayoutInflater mInflater; public MenuAdapter(String titles[], int icon[], String Name, int profile) { mNavTitles = titles; mIcons = icon; name = Name; this.profile = profile; } public MenuAdapter(String Titles[], int Icons[], Context mContext) { mNavTitles = Titles; mIcons = Icons; this.mContext = mContext; mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return mNavTitles.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = mInflater.inflate(R.layout.item_row, parent, false); TextView textView = (TextView) convertView.findViewById(R.id.rowText); ImageView imageView = (ImageView) convertView.findViewById(R.id.rowIcon); final LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.outerLayout); imageView.setImageResource(mIcons[position]); textView.setText(mNavTitles[position]); if (position == selectedPosition) layout.setBackgroundColor(mContext.getResources().getColor(R.color.app_bg)); else layout.setBackgroundColor(mContext.getResources().getColor(R.color.normal_bg)); return convertView; } public void setSelectedPosition(int position) { this.selectedPosition = position; } } 

    In deiner Tätigkeit mach das

      private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { mMenuAdapter.setSelectedPosition(position - 1); mMenuAdapter.notifyDataSetChanged(); } } 

    Wenn jemand noch Schwierigkeiten hat, fühlen Sie sich frei zu fragen.

    Ich habe das Schubladenmenü mit der benutzerdefinierten Adapterklasse implementiert. Vielleicht wird es jemand helfen, Schublade Liste

     <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 Artikel klicken listner von listview yourlistview.setItemChecked (position, true);

    Um die " Navigation Schublade Element Hintergrundfarbe für ausgewählte Element " zu ändern, können Sie es mit dem Attribut:

    ColorControlHighlight

    In deinem " styles.xml " könnte es so aussehen:

     <style name="YourStyleNameFor.NavigationDrawer" parent="ThemeOverlay.AppCompat.Light"> <item name="colorControlHighlight">@color/your_highlight_color</item> </style> 

    Vergessen Sie nicht, Ihren Style im Tag anzuwenden:

    Android.support.design.widget.NavigationView

    Zum Beispiel könnte man in Ihrem activity_main.xml so aussehen:

     <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/navigationdrawer_header" <!-- the following line referes to your style --> app:theme="@style/YourThemeNameFor.NavigationDrawer" <!-- the following two lines are maybe also interesting for you --> app:itemIconTint="@color/gray3" app:itemTextColor="@color/gray3" app:menu="@menu/navigationdrawer_main" /> 

    Das funktioniert für mich:

    1. Zuerst definiere eine zeichende item_bg.xml als:

       <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/nav_menu_bg" /> </selector> 
    2. Dann benutze diese Zeichnung in navigation_main_layout.xml als:

       <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:itemBackground="@drawable/item_bg" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_navigation" app:menu="@menu/navigation_main_layout_drawer" /> 
     <?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> 

    Zusätzlich zur Bereitstellung eines benutzerdefinierten Selektor, der für den listSelector zeichnend ist, sollten Sie auch die Hintergrundressource des Listenelements auf einen ähnlichen Selektor zeichnen, der verschiedene Zeichenketten für die verschiedenen Zustände hat.

    Ich verwende normalerweise meinen benutzerdefinierten Adapter, der ein int-Auswahlfeld und eine setSelection (int) -Funktion hat. Und in der getView-Funktion stelle ich den Hintergrund der Ansicht nach Position == Auswahl ein.

    Immer noch nicht sicher, warum es so ist, dass es nicht funktioniert. Aber die Art, wie ich es gefunden habe, ist, mein eigenes simple_list_item_activated Layout zu verwenden, um an den ArrayAdapter übergeben zu werden, der im Grunde das gleiche war, außer dass die Textfarbe auf Weiß gesetzt wurde. Ich habe dann getActionBar().getThemedContext() mit getActivity().getBaseContext() und hat nun einen Effekt.

    Das ist vielleicht nicht der richtige Weg und kann in der Zukunft Rückwirkungen haben, aber jetzt habe ich es so funktioniert, wie ich es will.

    Ich weiß, dass es zu spät ist, aber ich habe dieses Problem in meiner App gelöst.

    Pls denkt nicht, dass es dumm ist, einfach nur die Position von "state_pressed" nach oben ändern.

     <item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/> <item android:drawable="@drawable/list_item_bg_selected" android:state_activated="true"/> 

    In Zukunft, wenn jemand hier kommt, Navigations-Schubladen-Aktivität (bereitgestellt von Studio in Activity Prompt-Fenster)

    Die Antwort ist –

    Verwenden Sie dies vor OnCreate () in MainActivity

      int[][] state = new int[][] { new int[] {android.R.attr.state_checked}, // checked new int[] {-android.R.attr.state_checked} }; int[] color = new int[] { Color.rgb(255,46,84), (Color.BLACK) }; ColorStateList csl = new ColorStateList(state, color); int[][] state2 = new int[][] { new int[] {android.R.attr.state_checked}, // checked new int[] {-android.R.attr.state_checked} }; int[] color2 = new int[] { Color.rgb(255,46,84), (Color.GRAY) }; ColorStateList csl2 = new ColorStateList(state2, color2); 

    Und benutze dies in onNavigationItemSelected () in MainActivity (du brauchst diese Funktion nicht zu schreiben, wenn du Navigationsschublade aktivierst, wird es in MainActivity hinzugefügt).

      NavigationView nav = (NavigationView) findViewById(R.id.nav_view); nav.setItemTextColor(csl); nav.setItemIconTintList(csl2); nav.setItemBackgroundResource(R.color.white); 

    Tip – füge diesen Code vor, wenn sonst Bedingung in onNavigationItemSelected ()

    Dies hat für mich gearbeitet: implementiert Menü Schublade nicht durch Belegung der Navigationsansicht mit Liste, sondern mit Menüpunkten.

    Hat so ein ziehbares gemacht:

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/drawer_menu_selector_color" android:state_checked="true"></item> <item android:drawable="@color/drawer_menu_selector_color" android:state_activated="true"></item> 

    Und in onCreate-Methode die ID des Menüpunktes einstellen, der der ausgewählten Aktivität entspricht, wie sie überprüft wird. Und implementiere die ziehbare Selektordatei wie folgt in dein Navigationsschublade

      app:itemBackground="@drawable/drawer_menu_selector" 

    Fyi: Notwendigkeit, deinen 'App' Namespace zu definieren.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.