Non riesco a ottenere il ripple dello stato premuto per funzionare su uno Spinner. I singoli elementi a discesa hanno l'ondulazione, ma non lo stesso spinner. Ho pensato che forse questo era un comportamento previsto, ma questa animazione dalle linee guida sul design dei materiali mostra chiaramente lo spinner con un'increspatura di stato premuto prima che appaia il menu a discesa delle opzioni.Lo spinner Android non ha il ripple sul pulsante stesso, solo le sue opzioni
risposta
ho creato un nuovo Spinner
in un Activity
e come hai descritto, il RippleDrawable
non viene applicato al Spinner
utilizzando la libreria di compatibilità v7 o su Android 5.0+. Questo non mi sorprende; Google spesso non riesce a implementare il proprio design.
Per avere l'effetto, tutto ciò che ho fatto è stato creare un RippleDrawable
in res/values-v21/e impostarlo come sfondo sullo Spinner
utilizzando spinner.setBackgroundResource(R.drawable.spinner_background);
. Sono sicuro che puoi anche impostare questo nel tuo tema.
Sto iniziando a pensare che Google di proposito non ha implementato è un design proprio perché il popup/dropdown arriva così velocemente. È ancora molto frustrante per me, ma forse sono l'unica persona a preoccuparmi davvero. Impostando lo sfondo su questo rimuove lo sfondo esistente che ha uno stato premuto e un indicatore colorato. Inoltre non è retrocompatibile. –
impostare queste proprietà Spinner in xml
android:background="@drawable/ripple_effect"
android:dropDownSelector="@drawable/ripple_effect"
e ripple_effect.xml sarà simile a questa
<?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>
Impostando lo sfondo su questo rimuove lo sfondo esistente che ha uno stato premuto e un indicatore colorato. Inoltre non è retrocompatibile. –
C'è una biblioteca su Github, vale a dire Material Ripple Layout. Questa libreria supporta dispositivi pre-Lollipop e Lollipop. Inoltre, così puoi creare il tuo colore per l'ondulazione. Ecco l'utilizzo:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
MaterialRippleLayout.on(spinner)
.rippleColor(Color.BLACK)
.create();
Ma io non uso quella libreria. Sto usando il ripple predefinito di Spinner
che è stato introdotto nella libreria di supporto rev 23.0.1, compilando: compile 'com.android.support:appcompat-v7:23.0.1'
nel modulo app
nel modulo app
.
Quindi, ecco il mio codice completo per il layout Spinner
:
<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>
Lo stile è definito 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>
Dopo di che, l'effetto complessivo dovrebbe funzionare come previsto.
Impostando lo sfondo su questo rimuove lo sfondo esistente che ha uno stato premuto e un indicatore colorato. –
Ho utilizzato questa fantastica libreria per applicare effetti di ripple ad alcune viste. Mi piace, perché puoi avvolgere qualsiasi vista nel file XML e applicherà l'effetto a catena.
https://github.com/balysv/material-ripple
Speranza che aiuta.
Mi spiace non sono interessato all'utilizzo di una libreria di terze parti, voglio solo mettere a tema questo componente correttamente. –
La speranza sotto il codice darà un senso all'effetto Ripple su 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>
tuo 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"
/>
Sotto cambierà lo sfondo del menu a discesa.
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>
Nella tua res/Valori/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>
Spero che vi aiuterà.
Il popup/menu a discesa funziona già correttamente. Quello che sto cercando di risolvere è lo stato premuto dello spinner stesso. –
Non c'è ripple per lo Spinner, poiché lo sfondo non è ripplable. Faccio come segue in un layout selectableItemBackgroundBorderless
(https://developer.android.com/training/material/animations.html#Touch):
un
0
-widthSpinner
, e rimuovere la freccia giù sfondo (usare@null
sarà ok), anche io rimuovere lo sfondo di una normale Spinner, non ha ripper, quindi uso TextView e ImageView come il calendario di Google.un
TextView
+ImageView
(per la freccia giù)
Quando l'utente fa clic TextView/ImageView, ha animazioni ondulazione, quindi chiamare Spinner. performClick
. E lo voglio come normale menu a discesa, quindi creo uno spinner di larghezza 0
, poiché lo Spinner gone
non chiamerà onItemSelected
.
per l'adattatore nascosta, può in questo modo:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
((TextView) view).setText("");
return view;
}
Il layout click ascoltatore:
layout.setOnClickListener(() -> {
spinner.performClick();
});
Per la voce filatore ascoltatore:
spinner.setOnItemSelectedListener(() -> {
// this requires spinner's visiblity is not gone
});
- 1. Android Spinner non OnItemSelected chiamato con lo stesso articolo
- 2. Android: Ripple Background Programmaticamente
- 3. Perché lo spinner non gira/ruota?
- 4. AsyncTask "Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste."
- 5. Lo stesso menu di opzioni in tutte le attività in Android
- 6. TextView con il colore di sfondo solo sul testo stesso
- 7. come usare lo spinner
- 8. Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste
- 9. Ripple Effect di Android in WPF
- 10. Assegnare Stesso SNo alla madre e le sue Bambino
- 11. Come premere/fare clic sul pulsante utilizzando Selenium se il pulsante non ha l'ID?
- 12. Gravity spinner Android non funziona
- 13. come aggiungere il pulsante Vai in Android SoftKeyBoard e le sue funzionalità?
- 14. La tabella non ha colonne (pubbliche) solo sul dispositivo reale
- 15. Spinner Android - onItemSelected/setOnItemSelectedListener non innescare
- 16. Il test Android Junit ha esito negativo con "Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste".
- 17. Android: Layout spinner personalizzato
- 18. AutoCompleteTextView consente solo le opzioni suggerite
- 19. Perché il valore negativo di Integer.MIN_VALUE ha lo stesso valore?
- 20. Menu a discesa Android (senza spinner!)
- 21. Attivare un selezionato elemento modulo per mostrare le sue opzioni (aperto a discesa opzioni) con JavaScript
- 22. Modifica layout/design spinner Android
- 23. Il pop-over non punta sul pulsante
- 24. Android: due Spinner onItemSelected()
- 25. Blocca solo se il valore è lo stesso?
- 26. Evento clic sul pulsante per il widget Android
- 27. Android: EditText NextFocusDown non trigger Spinner
- 28. perché il mio spinner Android mostra il pulsante radio nella visualizzazione testo?
- 29. Android Ripple Effect sovrascritti da Stato Selected
- 30. Android: creare un popup che ha più opzioni di selezione
Puoi pubblicare ciò che si provato fino ad ora? Forse questo può aiutare http://stackoverflow.com/questions/27860815/ripple-effect-on-spinner-dropdown-items-colored-background-appcompat-v7-v21 – bonnyz