Esta es una pregunta bastante buena sobre el diseño de elementos en un ListView en Android.
Tengo una actividad con una barra de título en la parte superior y un ListView que ocupa el resto de la pantalla. Quiero que mi ListView aparezca con un relleno de 10dp a la izquierda, derecha y arriba, pero cuando desplace el ListView hacia arriba, quiero que cubra el relleno de 10dp superior antes de desaparecer debajo del borde desvaído. Del mismo modo, cuando se desplaza hacia la parte inferior, el último elemento de la lista debe aparecer con 10dp entre la parte inferior del último elemento de la lista y la parte inferior real de la pantalla (si se pregunta por qué, es porque hay una bonita imagen de fondo que quiero) asomando alrededor del ListView).
Intenté agregar relleno al ListView en sí, pero luego, al desplazar la lista, desaparece debajo del borde del relleno.
Soy de un fondo de desarrollo web, y la analogía sería agregar margen sobre el primer elemento de la lista (y debajo del último elemento de la lista).
fuente
getListView(). addHeaderView(capView)
ygetListView(). addHeaderView(botView)
asegúrate de que llamó antes de inicializar el contenido de la lista, por ejemplo. setListAdapter (adaptador);Respuestas:
Tu escribiste:
Establecer
ListView's
clipToPadding
atributo afalse
. Esto habilitará el relleno alrededorListView
y el desplazamiento hasta el final del diseño (y no solo hasta el borde del relleno).Un ejemplo:
android:clipToPadding
es un atributo XML deViewGroup
, la clase base para diseños y contenedores de vistas.La llamada al método relacionado es:
fuente
<item name="android:clipToPadding">false</item>
clipToPadding
través de un estilo no me funciona, es como si no se aplicara. Aunque, si lo configuro directamente en ListView, funciona.android:scrollbarStyle="outsideOverlay"
que la barra de desplazamiento también recorre todo el rellenoEl ListView anterior tendrá un relleno de encabezado y pie de página de 20 píxeles.
fuente
float mDensity = getResources().getDisplayMetrics().density; int height = (int) (50 * mDensity + 0.5f); padding.setHeight(height);
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
Apéndice a la respuesta de @ Jakobud ...
Mi listView ya estaba haciendo uso de las
android:divider/android:dividerHeight
propiedades para crear espacios transparentes entre los elementos de listView. Esto permitió que añada simplemente losandroid:headerDividersEnabled
y lasandroid:footerDividersEnabled
propiedades y establecer los puntos de vista de encabezado y pie de página paranew View(Activity.this)
.Ligera simplificación para casos en los que ya tiene divisores configurados en listView.
fuente
Mi solución usando a
ListFragment
, basada en las soluciones de @Jakobud y @ greg7gkb.fuente
La respuesta de @Gunnar Karlsson es buena, pero tiene el problema de que las vistas de celda se reciclan prematuramente cuando están completamente detrás del relleno, pero aún no están completamente fuera de la pantalla. La configuración de clipToPadding = false es responsable de esto y puede o no repararse en una versión futura de Android. ( Al usar clipToPadding en ListView, los elementos se reciclan prematuramente )
Tengo una buena solución simple sin efectos secundarios:
android:dividerHeight="-10dip"
, lo contrario de lo que está alrededor de la celdaEn comparación con la otra respuesta, no es necesario establecer el color del divisor. El relleno en las celdas superiores e inferiores estará presente, y el divisor negativo evitará divisores de doble altura en el medio.
fuente