2015-08-23 11 views
26

Come ho scritto nella mia domanda, voglio cambiare il colore della freccia a discesa (la freccia predefinita, non una freccia personalizzata o qualcosa di simile) di Spinnerin XML, ma il problema è che non ho trovato nulla per fare riferimento ad esso dal XML.Cambia colore della freccia a discesa di Spinner in XML

È possibile? Se sì, come posso cambiare il colore?

Grazie in anticipo.

+0

dare un'occhiata alla risposta [qui] (http: // StackOverflow.it/questions/25911287/change-color-of-small-triangle-on-spinner-in-android) – derfect

+0

@Rayes Ma è per un menu a discesa personalizzato, non il menu a discesa predefinito. –

+1

@ Error404 3 mesi dopo e sto affrontando lo stesso problema. la tua risposta accettata mi ha aiutato a risolvere il problema. 1 voto per te 1 per Hussein :) –

risposta

67

Ci sono tre modi per farlo.

1. Tramite il codice:

Nel vostro XML, assicurarsi che il filatore ha un id. Diciamo che abbiamo uno spinner con id "spinner".

Nel codice, aggiungere il seguente nella vostra onCreate():

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP); 

dove il rosso è il colore definito nel colors.xml nella cartella valori.

2. tramite XML:

Per API 21+:

<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:backgroundTint="@color/red" /> 

o se si utilizza la libreria di supporto, è possibile utilizzare:

<android.support.v7.widget.AppCompatSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:backgroundTint="@color/red" /> 

3. Attraverso drawable:

È possibile utilizzare questo strumento online: http://android-holo-colors.com

Questo genererà i drawable personalizzati per qualsiasi visualizzazione desiderata con il colore preferito. Assicurati di selezionare lo spinner, quindi scarica le risorse.

+0

Non ho il file 'colors.xml'. O devo crearlo? Voglio anche sottolineare che nella mia domanda, quando dico ** per XML **, voglio dire se c'è qualche opzione come 'android: colorDropDownArrow' o qualcosa del genere per impostare il valore dell'arrrow direttamente nell'XML. Grazie! –

+0

Sfortunatamente, non è possibile farlo dal tuo xml eccetto usando ** android: background = "@ drawable/spinnerBackground" **, ma questo cambierà completamente lo sfondo del tuo spinner. Quindi devi creare un nuovo xml nella cartella dei valori chiamata ** colors.xml ** e aggiungere un colore chiamato rosso. Controlla anche la mia risposta aggiornata, ho messo un altro modo invece di creare ** colors.xml ** se lo vuoi. –

+0

Grazie per l'aggiornamento! Ma ho ancora un dubbio. La freccia è visualizzata solo con il colore se non ho sfondo per lo Spinner, ma se faccio uno sfondo la freccia scompare. Sai perché è? –

11

sto nessuno sorpreso avevo fatto notare, ma si può solo sottoclasse Widget.AppCompat.Spinner e cambiare backgroundTint

<style name="Spinner" parent="Widget.AppCompat.Spinner"> 
     <item name="backgroundTint">@color/spinnerTint</item> 
</style> 

e applicarlo alla Spinner

<Spinner 
    style="@style/Spinner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:spinnerMode="dropdown" /> 
+2

La proprietà backgroundTint non è applicabile solo al livello API 21? –

+1

@niranjan_b 'android: backgroundTint' è. Questa è la versione AppCompat (non si noti alcun prefisso di Android qui e lo stile estende uno stile derivato AppCompat) – mewa

+0

OK! .. capito .. –

2

provare questo:

spinner_age.getBackground().setColorFilter(ContextCompat.getColor(this, 
       R.color.spinner_icon), PorterDuff.Mode.SRC_ATOP); 
+0

ha cambiato il colore di sfondo e non il colore della freccia – Zvi

0
<Spinner 
      android:id="@+id/spinner" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:backgroudTint="#00000" /> 
7

uso backgroundTint attributo

<Spinner 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:backgroundTint="@color/white" 
     /> 

se min_SDK < 21 (Lollipop) si dovrebbe usare AppCompatSpinner

<android.support.v7.widget.AppCompatSpinner 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:backgroundTint="@color/white" 
     /> 
Problemi correlati