Mi chiedo come posso fare un menu a discesa/menu come quelli che possiamo vedere nelle specifiche di disegni da Google e nell'immagine qui sotto, quindi l'elenco espande il muggito a destra sotto il pulsante. Devo impostare un layout personalizzato per questo anziché lo R.layout.support_simple_spinner_dropdown_item
?Pulsanti a discesa/Spinner simili a quelli delle specifiche di progettazione di Google
risposta
Tecnicamente è solo uno Spinner con visualizzazioni personalizzate e stili.
Ho provato a creare uno che assomigli a quello che hai postato, usando AppCompat, lavorando con i drawable personalizzati e con la proprietà di elevazione della vista, quindi potrebbe non funzionare completamente per le versioni Android precedenti alla 5.0.
Prima definiamo il nostro Spinner
con le sue proprietà discesa:
<your.package.CustomSpinner
android:id="@+id/spinner"
style="@style/Widget.AppCompat.Spinner"
android:layout_margin="10dp"
android:layout_width="200dp"
android:dropDownWidth="200dp"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:dropDownVerticalOffset="?attr/dropdownListPreferredItemHeight"
android:background="@drawable/spinner_bg"
android:popupBackground="@android:color/white"
android:paddingRight="14dp"
android:stateListAnimator="@drawable/spinner_sla"
android:popupElevation="3dp" />
Importante: Usiamo il CustomSpinner
class from this post, perché abbiamo bisogno i callback di sapere quando il filatore apre un chiude (per scopi di stile).
Quindi impostiamo lo spinner: Utilizziamo una vista personalizzata per l'elemento selezionato (layout definito di seguito) per applicare i nostri stili e il valore predefinito di AppCompat R.layout.support_simple_spinner_dropdown_item
, ma potremmo usare un altro layout per regolare ulteriormente lo stile.
String[] data = {"Arial", "Calibri", "Helvetica", "Roboto", "Veranda"};
ArrayAdapter adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item_selected, data);
adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
final CustomSpinner spinner = (CustomSpinner) view.findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setSpinnerEventsListener(new CustomSpinner.OnSpinnerEventsListener() {
public void onSpinnerOpened() {
spinner.setSelected(true);
}
public void onSpinnerClosed() {
spinner.setSelected(false);
}
});
E qui il spinner_item_selected.xml
di layout:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:background="@drawable/abc_spinner_mtrl_am_alpha"
android:ellipsize="marquee" />
Inoltre abbiamo bisogno dei drawable utilizzati in precedenza:
spinner_bg.xml
come sfondo della trottola:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true" android:drawable="@android:color/white" />
<item android:state_selected="true" android:drawable="@android:color/white" />
<item>
<inset android:insetLeft="-1dp" android:insetRight="-1dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#cccccc" />
<solid android:color="#f0f0f0" />
</shape>
</inset>
</item>
</selector>
spinner_sla.xml
per animare il filatore del elevazione:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<set>
<objectAnimator
android:duration="@android:integer/config_mediumAnimTime"
android:propertyName="translationZ"
android:valueTo="3dp" />
</set>
</item>
<item android:state_selected="true">
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="3dp" />
</set>
</item>
<item>
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="0" />
</set>
</item>
</selector>
Questo ci dà un risultato come questo (a sinistra crollato, destra aperta):
Se vogliamo usare un filatore con le immagini, ci sarebbe anche necessario definire un menu a discesa personalizzato vista articolo.
È possibile utilizzare un PopUpMenu http://developer.android.com/intl/es/reference/android/widget/PopupMenu.html
PopupMenu popup = new PopupMenu(context, view);
for (Element e: elementsList) {
popup.getMenu().add(e.id).setTitle(e.title);
}
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
popup.show();
- 1. Numero di pulsanti simili a Facebook
- 2. Alias di simboli deboli su OS X simili a quelli su Linux o equivalenti più simili?
- 3. Algoritmo e libreria iOS e Android per bordi sfumati delle immagini simili a quelli di Photoshop
- 4. Caratteri giapponesi simili a quelli cinesi su Android
- 5. Numero di pulsanti simili a Facebook non uguale a total_count in link_stat
- 6. Progettazione OOP PHP - limitazione dei parametri a classi figlio specifiche durante l'implementazione di interfacce generiche
- 7. Sistemi simili a NakedObjects?
- 8. Concorsi simili a Netflix
- 9. progettazione per la gestione delle eccezioni - motore di app google
- 10. API di ricerca immagini simili di Google
- 11. Mercuriale - Utilizzo di code simili a scaffali?
- 12. Aggiunta di valori a specifiche celle DataTable
- 13. Google Maps: come aggiungere elementi HTML a coordinate specifiche?
- 14. Aggiunta di pulsanti a livello di codice a un frammento
- 15. aggiungi a iCal e pulsanti di Google Calendar a una pagina
- 16. Librerie C++ simili a C#?
- 17. reindirizza 404 a URL simili
- 18. Decoratori C++ simili a Python
- 19. Google Grafico a linee: Colori differenti per specifiche gamme
- 20. Progettazione di relazioni a quattro tabelle
- 21. Progettazione di sistema di Google Trends?
- 22. Ottimizzazione delle immagini simile a Google Page
- 23. WPF - Come posso creare un pennello che dipinge quadrati simili a quelli di una carta da grafico?
- 24. Progettazione GUI Qt a livello di programmazione
- 25. Applicazioni di collaudo a molla utilizzando le specifiche di Scala
- 26. Laravel - Selezione di colonne specifiche su relazioni molti-a-molti
- 27. In Celery, come posso impedire a task a lungo ritardo di bloccare quelli più recenti?
- 28. Libreria per il rendering di grafici diretti (simili a graphviz) su Google App Engine
- 29. Recupero delle proprietà di Active Directory specifiche
- 30. utilizzando Live() - benefici - simili a legare()