2011-04-26 29 views
7

Quiero hacer una vista de chat usando ListView donde aparecen los nuevos mensajes en la parte inferior de la pantalla (por lo tanto, uso android: stackFromBottom = "true") y quiero agregar un encabezado al ListView que aparecerá en la parte superior de la pantalla. Cuando hay pocos mensajes, habrá un espacio vacío entre el encabezado y los mensajes, cuando haya muchos mensajes, el ListView será desplazable y el encabezado se ocultará, cuando los mensajes del fondo estén visibles (el encabezado se desplazará junto con el resto de los mensajes). El problema es que no puedo decirle a ListView que permita que sus encabezados o elementos llenen el espacio restante en la pantalla. android: layout_height = "fill_parent" no ayuda. Puedo hacer el encabezado estático usando RelativeLayout, pero no quiero. ¿Algunas ideas?Android ListView: encabezado/pie de página que llena el espacio restante en la pantalla

Respuesta

0

¿Por qué no simplemente pone la vista de lista en un diseño de tabla con 3 filas. Coloque la vista de lista en la fila del medio y luego use la fila superior e inferior como encabezado y pie de página.

+0

Lo que Marcos dijo funciona, pero me quedo con la disposición de la tabla. Puede establecer su encabezado y pie de página a una altura fija (en inmersión) y permitir que la vista de lista se encoja/crezca en altura según el dispositivo que se use. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Igual que con la respuesta de Marcos. Realmente necesito que este encabezado se desplace junto con ListView, cuando se llene el espacio vacío. Lo he visto en iPhone pero aún no en Android, así que no sé si es posible o no. – Elena

0

Use un LinearLayout en vertical con el encabezado en la parte superior, su ListView en el medio con layout_weight = "1" y luego su pie de página.

Una solución si desea que el Encabezado sea desplazable. Es inflar la posición 1 en su adaptador siendo el encabezado que desea desplazar.

+0

Pero cuando desplazo el ListView, el encabezado permanecerá visible. Como dije, el caso es un poco más problemático: quiero el encabezado en la parte superior, cuando no hay suficientes mensajes (y los mensajes están en la parte inferior), pero cuando el espacio está lleno de mensajes y el ListView se puede desplazar, quiero el encabezado para desplazarse junto con ListView. – Elena

+0

Hmmm ... es un poco más complicado. Verifica mi nueva respuesta. –

+0

¡Gracias por seguir respondiendo! Todavía no sé cómo colocar el encabezado en la parte superior de la pantalla (alinearlo con la parte superior de la pantalla) y colocar el resto de los elementos en la parte inferior cuando no hay suficiente contenido para completar el ListView. Hacer algunos cálculos de núcleo duro en el código es una solución posible, pero estoy buscando una forma más inteligente de hacerlo. – Elena

0

Sólo hacer un diseño diferente, como header_list.xml

<?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="wrap_content" 
    android:background="@drawable/listitem_background" 
    android:layout_marginLeft="4dip" android:layout_marginRight="4dip" 
    android:gravity="center_vertical|center_horizontal" 
> 

     <TextView android:id="@+id/nearByLabel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Load More Results" 
      android:textColor="#000" 
      android:textStyle="bold" 
      android:textSize="20sp" 
      /> 

</LinearLayout> 

Y en su actividad agregarlo como

View headerView = inflater.inflate(R.layout.header_list, null); 
yourlistView.addHeaderView(headerView); 
+1

Gracias por su respuesta, pero esa no era la pregunta. La forma en que he resuelto la mía por ahora es poner el encabezado en la parte superior de la pantalla y cuando el primer elemento de la lista ya no está visible para ocultarlo con la animación. – Elena

Cuestiones relacionadas