2012-08-22 59 views
6

lolandroide Spinner: Texto centro verticalmente dentro spinner

necesito estos hiladores para centrar verticalmente el texto. He intentado cosas como esta en la definición XML Spinner:

<Spinner 
    android:id="@+id/dir_spn" 
    android:layout_gravity="center_vertical" 
    android:gravity="center_vertical" 
    android:layout_weight="1"/> 

He intentado construir una costumbre diseño desplegable:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="@style/SpinnerDropDownItem" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" /> 

styles.xml:

<resources> 
<style name="SpinnerDropDownItem"> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:layout_gravity">center_vertical</item> 
    <item name="android:textColor">?android:attr/textColorPrimary</item> 
    <item name="android:textColorHighlight">#FFFF9200</item> 
    <item name="android:textColorHint">?android:attr/textColorHint</item> 
    <item name="android:textColorLink">#5C5CFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 
</resources> 

adaptador del juego desplegable :

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 

ho ¿Cómo hago para que el texto de Spinner se centre verticalmente?

EDIT: puede valer la pena mencionar que la actividad tiene como tema en el manifiesto de esta manera:

<resources> 
<style name="SpeakNSpell" parent="@android:style/Theme"> 
    <item name="android:minHeight">68sp</item> 
</style> 
</resources> 

que hace que todas las Vistas al menos 68sp altas. ¿Esto está afectando el texto dentro del Spinner también?

+0

que sería reducirlo a la forma más simple e ir de allí. Primero pruébelo sin el estilo y el artilugio elegante. Realice un diseño simple de TextView y establezca la gravedad en center_vertical y vea si eso funciona. Además, el diseño desplegable es * no * el que se muestra cuando el girador está cerrado (como lo está mostrando). Tal vez necesite aplicar su estilo al diseño utilizado cuando se cierra el control giratorio. – Barak

+0

No veo su spinner 'android: layout_width = "wrap_content" 'and' android: layout_height = "wrap_content" ' – slybloty

Respuesta

8

reescritura

parece que quieres centrar el texto verticalmente en el recurso elemento, se muestra a continuación, pero sus ejemplos de código objetivos en el menú desplegable menú ...

Compare Layouts

El Rastrillo es el diseño predeterminado android simple_spinner_item y el final es el mismo, pero se ha agregado android:gravity="center_vertical".

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerItemStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:gravity="center_vertical" 
    android:singleLine="true" /> 

Puede ver que utilicé su tema con la gran minHeight. Aquí es un ejemplo básico para utilizar este diseño en un adaptador:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, list); 
// set whatever dropdown resource you want 
spinner.setAdapter(adapter); 

Fui con la suposición de que desea "CASH", "Seleccionar producto", etc de la imagen centrada, que me haga saber si donde tratar para hacer otra cosa!

0

En su SpinnerAdapter intentar algo como esto:

public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     View v = super.getDropDownView(position, convertView,parent); 
     ((TextView) v).setGravity(Gravity.CENTER); 
     return v; 
} 
3

Si alguien sigue teniendo problemas después de ajustar gravity, tratar de establecer el relleno de la Spinner:

   android:paddingTop="0dp" 
       android:paddingBottom="0dp" 
+0

Si pudiera votar esto 5 veces, lo haría. Pasé horas peleando con el Spinner tratando de hacer que se comportara y honrar el android: gravity = "center_vertical" en vano. La solución fue tan simple como esto.Creo que la razón por la que se estaba portando mal fue que configuré el atributo de fondo en un parche 9. Después de eso, el Spinner insistió en colocar contenido de texto en la parte superior. Muchas gracias por esta publicación. – Mitselplik