Android Spinner hat keine Kräuselung auf Knopf selbst, nur seine Optionen

Ich kann nicht scheinen, die gedrückte Zustandskräuselung zu bekommen, um an einem Spinner zu arbeiten. Die einzelnen Dropdown-Artikel haben die Welligkeit, aber nicht die Spinnerin selbst. Ich dachte vielleicht, dass dies erwartet wurde Verhalten, aber diese Animation aus der Material-Design-Richtlinien zeigt deutlich, die Spinner mit einer gedrückten Zustand Welligkeit, bevor die Optionen drop dropdown erscheint.

  • So stellen Sie den aktuellen Spinnertext ein, ohne die zugehörigen Auswahllistenpositionen zu ändern
  • Mehrere Spinner und onItemSelected
  • Android fügt Pfeilbild zum Spinner hinzu
  • Android-Daten werden im Spinner zugewiesen, aber wenn sie nicht den Wert im Spinner angezeigt haben
  • Populäre Spinner mit Jahren dynamisch in Android?
  • Spinner OnclickListener-Ereignis wird zweimal ausgeführt, wie man beide Ereignisse behandelt
  • Populieren Android Spinner mit Liste der Objekte
  • Kann ich die Dropdown-Ansicht eines Spinners zwingen, bei Orientierungsänderungen sichtbar zu bleiben?
  • 6 Solutions collect form web for “Android Spinner hat keine Kräuselung auf Knopf selbst, nur seine Optionen”

    Ich habe einen neuen Spinner in einer Activity und wie du beschrieben hast, wird das RippleDrawable nicht auf die Spinner mit der v7-Kompatibilitätsbibliothek oder auf Android 5.0+ angewendet. Das ist mir nicht überraschend; Google scheitert oft um ein eigenes Design.

    Um den Affekt zu haben, war alles, was ich tat, ein RippleDrawable in res / values-v21 / und setze damit den Hintergrund auf dem Spinner mit spinner.setBackgroundResource(R.drawable.spinner_background); . Ich bin sicher, dass du das auch in deinem Thema setzen kannst.

    Setze diese Spinner-Eigenschaften in xml

     android:background="@drawable/ripple_effect" android:dropDownSelector="@drawable/ripple_effect" 

    Und ripple_effect.xml wird so aussehen

     <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight" > <item android:id="@android:id/mask"> <shape android:shape="rectangle" > <solid android:color="?android:colorAccent" /> </shape> </item> </ripple> 

    Es gibt eine Bibliothek auf Github, dh Material Ripple Layout . Diese Bibliothek unterstützt Pre-Lollipop- und Lollipop-Geräte. Auch so können Sie Ihre eigene Farbe für die Welligkeit erstellen. Hier ist die Verwendung:

     Spinner spinner = (Spinner) findViewById(R.id.spinner); MaterialRippleLayout.on(spinner) .rippleColor(Color.BLACK) .create(); 

    Aber ich benutze diese Bibliothek nicht. Ich benutze die Spinner -Standard-Welligkeit, die in Support Library Rev 23.0.1 eingeführt wird, durch Kompilieren: compile 'com.android.support:appcompat-v7:23.0.1' in build.gradle des app Moduls.

    Also, hier ist mein vollständiger Code für das Spinner Layout:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:dropDownVerticalOffset="@dimen/dropDown_spinner" style="@style/SpinnerStyle"/> <!-- apply the ripple style --> </RelativeLayout> 

    Der Stil ist in res/values/styles.xml :

     <style name="SpinnerStyle" parent="Widget.AppCompat.Light.Spinner.DropDown.ActionBar"> <item name="android:background">?android:selectableItemBackground</item> <item name="android:dropDownSelector">?android:selectableItemBackground</item> <item name="android:divider">@null</item> <item name="overlapAnchor">true</item> </style> 

    Danach sollte der Welligkeitseffekt wie erwartet funktionieren.

    Ich habe diese coole Bibliothek benutzt, um Ripple-Effekte auf einige Ansichten anzuwenden. Ich mag es, weil man jede Ansicht in der XML-Datei einpacken kann und es wird den Ripple-Effekt anwenden.

    https://github.com/balysv/material-ripple

    Ich hoffe es hilft.

    Hoffnung unter Code gibt etwas Sinn für Ripple-Effekt auf Spinner.

    Ripple_spinner.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <ripple android:color="?android:attr/colorControlHighlight"> <item> <shape> <solid android:color="@android:color/white" /> </shape> </item> </ripple> </item> 

    Ihr XML: –

    Your_acitivity.xml

     <Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:dropDownSelector="@drawable/ripple_spinner" android:popupBackground="@drawable/popup_spinner_item_background" /> 

    Im Folgenden wird der Hintergrund des Dropdowns geändert.

    Popup_spinner_item_background.xml

     <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="2dp" /> <solid android:color="@android:color/white" /> </shape> 

    In deinem res / values ​​/ styles.xml: –

    Styles.xml

     <resources> <style name="AppTheme" parent="android:Theme.Material.Light"> <!--Workaround for the Android bug--> <item name="android:dropDownListViewStyle">@style/Theme.MyListView</item> </style> <style name="Theme.MyListView" parent="@android:style/Widget.Material.ListView.DropDown"> <item name="android:listSelector">@drawable/spinner_ripple</item> </style> </resources> 

    Hoffe, es wird dir helfen.

    Es gibt keine Welligkeit für den Spinner, da der Hintergrund nicht ripplabel ist. Ich mache es wie folgt in einem selectableItemBackgroundBorderless Layout ( https://developer.android.com/training/material/animations.html#Touch ):

    1. Ein 0 Width Spinner , und entfernen Sie den Pfeil nach unten Hintergrund (verwenden Sie @null wird ok sein), auch ich den Hintergrund eines normalen Spinner entfernen, hat es keine Ripper, so dass ich TextView und ImageView wie Google Kalender verwenden.

    2. Ein TextView + ImageView (für den Pfeil nach unten)

    Wenn der Benutzer auf die TextView / ImageView klickt, hat er Kräuselungsanimationen und ruft dann Spinner an. performClick . Und ich will es als das normale Dropdown, also mache ich einen 0 Width Spinner, da der gone Spinner nicht auf onItemSelected .

    Für den versteckten Adapter kann es so sein:

     @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); ((TextView) view).setText(""); return view; } 

    Das Layout Klick-Listener:

     layout.setOnClickListener(() -> { spinner.performClick(); }); 

    Für spinner item listener:

     spinner.setOnItemSelectedListener(() -> { // this requires spinner's visiblity is not gone }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.