2011-09-22 31 views

risposta

45

Creare un adattatore per il filatore come questo,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.my_spinner_style,array_of_values) { 

    public View getView(int position, View convertView,ViewGroup parent) { 

     View v = super.getView(position, convertView, parent); 

     ((TextView) v).setTextSize(16); 

     return v; 

    } 

    public View getDropDownView(int position, View convertView,ViewGroup parent) { 

     View v = super.getDropDownView(position, convertView,parent); 

     ((TextView) v).setGravity(Gravity.CENTER); 

     return v; 

    } 

}; 

Ora il layout R.layout.my_spinner_style,

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+android:id/text1" 
style="?android:attr/spinnerItemStyle" 
android:singleLine="true" 
android:textColor="#ffffff" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:ellipsize="marquee" /> 

Now imposta questo adattatore al tuo spinner,

spinner.setAdapter(adapter); 
+0

diversi temi potrebbero richiedere di impostare il padding orizzontale su 0 (o qualsiasi altro valore, purché entrambi i lati siano uguali) dello spinner e di sovrascrivere i dettagli dello spinner che potrebbero compensare il layout interno. – CurlyCorvus

34

È necessario impostare il proprio layout per la voce spinner.

SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.spinner_item, new String[]{"A", "B", "C"}); 
spriner.setAdapter(adap); 

Dove R.layout.spinner_item è un layout con i contenuti:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:gravity="center" 
    android:textColor="#000000" 
    android:text="Sample Text" 
    android:paddingBottom="5dp" 
    android:paddingTop="5dp"></TextView> 
+0

Questo non funziona se la finestra di selezione è popup popup –

-8

me Diamo risposta completa. È anche importante fare spazio in Spinner.

Sbagliato:

<Spinner 
android:id="@+id/spinner" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
/> 

destra:

<Spinner 
android:id="@+id/spinner" 
android:layout_width="100dp" 
android:layout_height="wrap_content" 
/> 
3

ritardo al gioco, ma ho voluto aggiungere questo per i futuri utenti solo perché ho trovato una soluzione semplice per il mio problema. Mi ha permesso di centrare il testo semplice senza creare un layout personalizzato. Il modo in cui ho fatto questo stava usando padding

<Spinner 
    android:id="@+id/example_spinner" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:paddingTop="2dp" 
    android:paddingBottom="2dp" /> 

sono riuscito a centrare il mio testo nel mio filatore utilizzando questo metodo. Questo probabilmente funzionerà solo per casi semplici, ma probabilmente vorrai usare un layout personalizzato per casi più complessi. Questo è solo per mantenere i file xml verso il basso ed evitare di dover usare un layout personalizzato solo per centrare un semplice spinner.

+0

Questo centra veramente il testo su tutti i dispositivi? Oppure funziona solo su determinati dispositivi con dimensioni dello schermo specifiche? –

5

questo funziona senza il layout cambia

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
       ((TextView) adapterView.getChildAt(0)).setGravity(Gravity.CENTER); 
     } 
}); 
+0

app "si blocca" quando si ruota da verticale a orizzontale. – oskarko

+0

@oskarko pubblica il logcat, forse possiamo aiutarti – Borja

+0

non importa. Ho trovato una soluzione migliore http://stackoverflow.com/questions/7511049/set-view-text-align-at-center-in-spinner-in-android/7511272#7511272 – oskarko

9

Questo è molto semplice, basta creare un file xml chiamato come spinner_item.xml con contenuto come

<TextView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:textColor="#111111" 
android:padding="10dp" 
android:textAlignment="center" 
/> 

Ora nel tuo java classe, nonostante l'aggiunta di default di Android visualizza risorsa aggiungi la risorsa visualizzazione personalizzata come

ArrayAdapter<String> adapter= new ArrayAdapter<String>(context, R.layout.spinner_item, myList); 
adapter.setDropDownViewResource(R.layout.spinner_item); 

La riga textAlignment farà la differenza.

+0

E questa è la risposta giusta. Almeno per me gli altri con la forza di gravità non hanno portato a nulla. – Ivan

+0

questa dovrebbe essere la risposta accettata, grazie. – j2emanue

+0

sì, questo è quanto. funziona perfettamente – Thecarisma

Problemi correlati