7

Voglio rendere un TextView simile a uno spinner con il nuovo stile Materiale.Stile TextView come uno Spinner con appcompat v21

Sono riuscito a farlo con lo stile "Widget.Material.Light.Spinner", ma non ho trovato alcuna alternativa nelle risorse AppCompat (v21). mio xml:

<TextView 
     android:id="@+id/sp_league_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     tools:text="Premier league" 
     style="@android:style/Widget.Material.Light.Spinner" 
     android:textColor="@android:color/white" /> 
+0

Perché non usi un 'Spinner' se hai bisogno di uno spinner? – TWiStErRob

+1

Ho bisogno di uno spinner con finestra di dialogo personalizzata e questo è il modo più semplice per farlo – Idob

+0

Aha, quindi stai [re-implementando 'android: spinnerMode =" dialog "'] (http://stackoverflow.com/questions/12170289/show-custom-dialogo-quando-filatore-è-essere-cliccato). – TWiStErRob

risposta

13

mi piacerebbe andare con:

style="@style/Widget.AppCompat.Spinner" 

ma sentitevi liberi di scegliere un altro: enter image description here

+1

Questo non funziona per me su pre-Lollipop. Pubblicherò ora come l'ho fatto. –

+0

@androiddeveloper Ho provato su 4.4, ma guardando la data che potrebbe essere stata prima dell'appcompat-v7 revisionata per Lollipop. – TWiStErRob

+0

Ha senso. Scusate.se trovi una soluzione migliore di quella che ho fatto, ti preghiamo di aggiornarla e di informarla. –

1

La soluzione stile non ha funzionato per me, ma io' Ho trovato un'altra soluzione:

Io uso invece AppCompatButton e ho questo:

XML:

<android.support.v7.widget.AppCompatButton 
android:background="@drawable/abc_spinner_mtrl_am_alpha" 
... /> 

Java:

((AppCompatButton)findViewById(...)).setSupportBackgroundTintList(new ColorStateList(new int[][]{new int[0]}, new int[]{0xff52A1E8})); 

EDIT: sembra che non funziona bene più, ma ha trovato un'altra soluzione:

<style name="Widget.MyTheme.HeaderBar.Spinner" parent="Widget.AppCompat.Light.Spinner.DropDown.ActionBar"> 
</style> 

È vero che è per l'azione barra, ma dovrebbe funzionare anche per altri casi.

+0

Questo metodo ha funzionato bene per i dispositivi pre-lecca-lecca. Tuttavia, non ha un bell'aspetto sul lecca-lecca perché c'era una scatola disegnata sullo sfondo. Ho dovuto usare 'TextView' con' style = "@ android: style/Widget.AppCompat.Spinner" 'su API 21 o successive. Ho usato AppCompat v23.0.1. – hfann

+0

@hfann Hmmm ... questo era molto tempo fa, e funzionava. Aggiungerò ora ciò che funziona per me. –

+0

@androiddeveloper Ho provato il tuo ultimo sol. di usare 'Widget.AppCompat.Light.Spinner.DropDown.ActionBar' e sì ho provato su item non-actionbar. Ma sul dispositivo 4.1, non funziona, il che significa che non mostra un'interfaccia utente di selezione a scorrimento, ma visualizza solo Plain TextView. – AADProgramming

0

ho testato le soluzioni menzionate qui

1.Utilizzando style="@style/Widget.AppCompat.Spinner) e
2.Tramite Widget.AppCompat.Light.Spinner.DropDown.ActionBar

Entrambi questi lavori solo su dispositivi Android e 5.x Sopra e no lavoro bene per Android dispositivi in ​​esecuzione su 4.xe sotto.

Quindi, sto postando la mia soluzione per coloro che volevano avere un effetto simile a Dropdown a TextView per tutti i dispositivi.

applicazione ha bisogno di creare una cartella Drawable all'interno drawable in App, diciamo dropdown_spinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/ic_icon_arrow" 
    android:gravity="end" /> 

E poi semplicemente utilizzare questo come sfondo per la TextView come di seguito:

<TextView 
    android:id="@+id/mySpinnerTextView" 
    android:background="@drawable/dropdown_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    />