tutorial studio metodos developer control activity android header android-listview footer divider

studio - listview android eclipse



Espacio vacĂ­o entre el encabezado listview y el primer elemento (6)

En el método getview, puede verificar si el artículo es el primero o el último y establecer deveedor personalizado que tendrá una altura de 0 o una altura de píxel único de color transparente.

Creé una aplicación de Android con un ListView. He agregado un encabezado y un pie de página a la lista. Pero al agregar un divisor / separador también crea un espacio vacío entre el encabezado y el primer elemento ListView. Hace lo mismo para el último elemento ListView y el pie de página.

El espacio vacío es equivalente al tamaño del divisor entre todos los elementos ListView, con la diferencia de que no dibuja el divisor y simplemente deja espacio libre. Pensé que había encontrado la solución con los atributos xml ''Divisores de pie de página habilitados'' y ''Divisores de encabezado habilitados''. Pero al configurarlos en falso, no cambia nada. Incluso traté de configurarlos programáticamente con

list.setFooterDividerEnabled(false); list.setHeaderDividerEnabled(false);

Pero simplemente no funciona. ¿Alguna forma de solucionar ese problema? Simplemente no quiero que el espacio vacío esté allí, quiero que el primer elemento se ajuste exactamente al encabezado (lo mismo para el pie de página).


Me encontré con el mismo problema, pero en una situación ligeramente diferente a la tuya. My ListView tiene un encabezado (un cuadro de búsqueda), pero el primer elemento debajo contiene un encabezado de sección (una fecha o una letra) en lugar de ser un elemento de lista normal (con el contenido real en forma de una imagen, algo de texto, y así). Como tal, quiero que no sea seleccionable, por lo que en mi adaptador personalizado he reemplazado areAllItemsEnabled para devolver false .

Gran error, porque ese es exactamente el culpable. Vea, parece que, por diseño, la implementación de ListView solo dibuja divisores entre dos elementos habilitados , pero todavía reserva espacio para divisores entre un elemento habilitado y uno deshabilitado, incluso si esos divisores no se dibujarán. El hecho de que esta es una decisión de diseño consciente no significa que no sea estúpido, por supuesto. Lo más extraño de todo es que esta política de dibujo de separadores se basa solo en el valor devuelto por areAllItemsEnabled lugar de los valores devueltos por las llamadas individuales a isEnabled para los elementos subsiguientes.

Por lo tanto, para areAllItemsEnabled , solo tenía que devolver true desde areAllItemsEnabled (mantuve el método reemplazado y areAllItemsEnabled un comentario sobre este problema, de lo contrario no podría recordarlo dentro de un mes): he aquí, espacio en blanco desapareció, reemplazado por un divisor. Ahora, si quiero mostrar el encabezado ListView y el encabezado de la primera sección como exactamente adyacentes, solo tengo que elegir un color divisor que sea igual al color del encabezado de sección.

Realmente espero que sea el mismo caso que el tuyo, o que mi solución te ayude de alguna otra manera.


No encontré una gran solución.

Establezca dividerHeight="0dp" y cree mis propios divisores manualmente, ya sea directamente en el diseño XML o dinámicamente en el adaptador si necesita un control más preciso.


Solo haz

list.setDividerHeight(0)

Eso debería cuidar de él.


vaya a las propiedades de ListView en el diseño de Android y busque la etiqueta de espaciado ... de alguna forma en Android, cuando se crean diseños nuevos, se creará por defecto la separación espaciamiento del encabezado y las propiedades del borde. compruébalo, si está disponible, quítalo


pulltorefresh la solution este tipo y funciona (el código está basado en pulltorefresh ):

el diseño xml (header.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" > <RelativeLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="16dp" android:layout_marginTop="2dp" /> </RelativeLayout> </LinearLayout>

cuando creas vistas:

m_headerView = inflater.inflate(R.layout.header, this, false);

si quieres mostrarlo, haz esto:

m_headerView.setPadding(0, 0, 0, 0); m_headerView.setVisibility(View.VISIBLE);

si quieres ocultarlo, haz esto:

m_headerView.setPadding(0, -1000, 0, 0); m_headerView.setVisibility(View.GONE);

funciona perfectamente en nuestro proyecto. Espero que sea útil.