2010-04-26 21 views
5

Tengo un Spinner con un ArrayAdapter que introduce valores en él. El diseño de esta vista se ve algo como esto:¿Cómo personalizar el TextView dentro de un Spinner?

 <TextView 
      android:text="Household Income: " 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical" /> 

     <Spinner 
      android:id="@+id/incomespinner" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:padding="2dip" /> 

El problema es que el texto es largo para la vista y el resultado es una ruleta muy, muy feo. Como se puede ver en la captura de pantalla:

alt text http://janusz.de/~janusz/spinner.png

Me trataron de pasar el Id de mi propia TextView en el adaptador, pero cada vez la ruleta debe mostrar consigo una excepción que el ID de I suministrada no es válida:

04-26 17:38:39.695: ERROR/AndroidRuntime(4276): android.content.res.Resources$NotFoundException: Resource ID #0x7f09003a type #0x12 is not valid 

¿Dónde tengo que definir el TextView? En un archivo xml separado? Con un grupo de vista alrededor?

Me ayudaría mucho si pudiera ver un ejemplo de la inicialización del adaptador y la definición de la vista de texto?

Respuesta

3

La respuesta fue eliminar el relleno de la definición de Spinner. Cada vez que configuro el relleno del Spinner, el texto pierde su forma.

El spinner dibuja está utilizando la caja de relleno del parche nueve para determinar dónde dibujar el contenido. Si configuro manualmente un relleno, se anulará la definición del relleno del cuadro de relleno.

Si desea establecer un relleno además de una caja de relleno, debe envolver todo dentro de ese paddinbox en un contenedor de diseño adicional.

5

Reemplace el método getView del Adaptador para crear un elemento de vista de lista personalizado.

View getView(int position, View convertView, ViewGroup parent) { 
    TextView tv = null; 
    if(covertView instanceof TextView) { 
      tv = (TextView) convertView; 
    } else { 
      tv = new TextView(this); 
      tv.setText("Awesome Text"); 
    } 
    return tv; 
} 

también cuando se crea el adaptador que puede pasar en un diseño a utilizar para el elemento, por lo que en ese caso sería un ConvertView RelativeLayout o LinearLayout.

1

use /home/user/android-sdk-linux/tools/./draw9patch (es para Linux), en Windows vaya a las herramientas en el directorio android-sdk-windows y ejecute draw9patch.

y utilizar de modo de imagen, por ejemplo:

enter image description here

Atención a líneas negras de la imagen en. (Estas líneas negras son genera por draw9patch)

resultados imagen adicional en el archivo de extensión 9, por ejemplo: img.9.png (IMG EXPANSIVO horizontal y vertical)

Cuestiones relacionadas