2010-08-31 37 views
6

¿Cómo puedo hacer columnas en Android ListView? Tengo este diseño de elemento de lista xml:Columnas en ListView Android

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="horizontal"> 
    <TextView android:layout_weight=".3" android:layout_width="wrap_content" 
     android:layout_height="fill_parent" android:id="@+id/hour" 
     android:gravity="center" /> 
    <ImageView android:id="@+id/symbol" android:scaleType="fitCenter" 
     android:layout_gravity="center_horizontal" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight=".5" /> 
    <TextView android:layout_weight=".8" android:layout_width="wrap_content" 
     android:layout_height="fill_parent" android:id="@+id/temperature" 
     android:gravity="center" /> 
    <TextView android:layout_weight="1" android:layout_width="wrap_content" 
     android:layout_height="fill_parent" android:id="@+id/percipitation" 
     android:gravity="center" /> 
    <TextView android:layout_weight="1" android:layout_width="wrap_content" 
     android:layout_height="fill_parent" android:id="@+id/wind_speed" 
     android:gravity="center" /> 
    <TextView android:layout_weight="1" android:layout_width="wrap_content" 
     android:layout_height="fill_parent" android:id="@+id/wind_direction" 
     android:gravity="center" /> 
</LinearLayout> 

El problema es cuando el f.ex. wind_direction cambia de "4" a "300", luego las columnas no están alineadas.

The problem http://img185.imageshack.us/img185/2812/deviceo.png

¿Quién puede hacerse esto con un ancho fijo de columnas y el uso de todo el ancho independiente de los dispositivos?

Respuesta

3

Considere el uso de un TableLayout en lugar de un ListView. Esto está diseñado para tener filas y columnas. Ver Hello TableLayout.

Para agregar filas programáticamente, puede inflar TableRow y llamar a addView en TableLayout.

+0

¡Gracias, eso funcionó! –

2

Usted podría hacer uno de estos en lugar de wrap_content en los TextViews:

android:layout_width="40dip" 

lo anterior define la anchura independiente de la densidad, o

android:layout_weight="2" 

que se puede utilizar para establecer el ancho porcentual en cada vista de texto.

también ver este post y el enlace: What is the difference between "px", "dp", "dip" and "sp" on Android?

7

Usted puede utilizar layout_weight en conjunción con layout_width de 0 como esto en su diseño elemento xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:id="@+id/text1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 

    <TextView 
     android:id="@+id/text2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2"/> 
</LinearLayout> 

En esencia, el layout_width de las fuerzas 0DP todo las vistas de texto no tienen ancho Como el ancho de reserva en el diseño lineal se reparte de acuerdo con el formato_weight después de que se haya determinado el ancho de las vistas de texto, se comienza con un campo de juego parejo entre los cuadros de texto que tienen el mismo ancho (0). Sin el ancho 0, los cuadros de texto comienzan en diferentes anchuras y agregar espacio extra (a través de layout_weight) aún deja los cuadros de texto en un ancho diferente.

+2

Eso solo funciona si el ancho de las columnas está interrelacionado. – Richard

1

Si tiene muchos datos para mostrar, no use TableLayout. El rendimiento y el consumo de memoria es horrendo. La visualización de sus datos puede demorar varios segundos y obtendrá el error de coreógrafo de que su aplicación está procesando demasiado en el hilo de la interfaz de usuario