2011-09-22 15 views

Respuesta

45

Crear un adaptador para su spinner como éste,

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; 

    } 

}; 

Ahora su diseño 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" /> 

ahora coloque este adaptador en su spinner,

spinner.setAdapter(adapter); 
+0

varios temas pueden requerir para establecer el relleno horizontal a 0 (o cualquier otro valor, siempre que ambos lados sean iguales) de la ruleta, así como para anular los detalles de giro que pueden compensar el diseño interior. – CurlyCorvus

34

Tiene que establecer su propio diseño para el elemento giratorio.

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

Dónde R.layout.spinner_item es un diseño con contenido:

<?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

Esto no funciona si el modo spinner es emergente de diálogo –

-8

Let Me respuesta completa. También es importante hacer espacio en Spinner.

incorrecto:

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

Derecha:

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

tarde al juego, pero quería añadir este para los futuros usuarios sólo porque he encontrado una solución simple para mi problema. Me permitió centrar texto simple sin crear un diseño personalizado. La forma en que hice esto fue mediante 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" /> 

tuve éxito en mi texto centrado dentro de mi spinner usando este método. Es probable que esto solo funcione para casos simples, pero de todos modos probablemente desee utilizar un diseño personalizado para casos más complejos. Esto es solo para mantener sus archivos xml presionados y evitar tener que usar un diseño personalizado solo para centrar un girador simple.

+0

¿Esto realmente centra el texto en todos los dispositivos? ¿O solo funciona en ciertos dispositivos con tamaños de pantalla específicos? –

5

Esto funciona sin modificación de layout

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

la aplicación "se bloquea" al rotar de vertical a horizontal. – oskarko

+0

@oskarko publicar el logcat, tal vez podemos ayudarle – Borja

+0

no importa. He encontrado una solución mejor http://stackoverflow.com/questions/7511049/set-view-text-align-at-center-in-spinner-in-android/7511272#7511272 – oskarko

9

Esto es muy sencillo, basta con crear un archivo xml nombrado como spinner_item.xml con contenidos como

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

En su java clase, a pesar de la adición de por defecto de Android ver recurso agregar su recurso de vista personalizado como

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

La línea textAlignment hará el truco.

+0

Y esa es la respuesta correcta. Al menos para mí, otros con la gravedad no llevaron a nada. – Ivan

+0

esta debería ser la respuesta aceptada, gracias. – j2emanue

+0

sí, esto es todo. funciona perfectamente – Thecarisma

Cuestiones relacionadas