studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android centering android-drawable

para - manual de programacion android pdf



Agregar margen inferior al último elemento de ListView (7)

Necesito agregar para agregar ListView con elementos complicados de fondo: diferente para las esquinas pares / impares y redondeadas en la parte superior e inferior. Se parece a esto:

He implementado todo esto a través de la lista de niveles, pero hay una cosa más que quiero hacer. Ahora el elemento inferior está cerca de la parte inferior de la pantalla. Es mejor agregar algo de espacio.

No deseo agregar el margen inferior a ListView, solo necesito margen para el último elemento.

Las formas en que veo hacer esto:

Pie de página

Una especie de hack: agrega el pie de página con TextView vacío a ListView. Pero los pies de página son cosas bastante inestables, generalmente desaparecen después de notifyDataSetChanged y no hay forma de recuperarlos

Imagen con píxeles transparentes

Le pedí al diseñador que agregue píxeles transparentes al recurso de fondo del fondo. Desafortunadamente, en este caso, el centrado vertical está completamente roto. Por ejemplo, hay 9patches como este:

Y un diseño como este:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- View with background with transparent pixels on bottom --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/item" android:background="@drawable/some_bgr" android:padding="10dp" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Title" android:layout_gravity="center" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Detail" android:layout_gravity="center" android:textSize="18sp" /> </LinearLayout> <!-- Just for marking place took by view --> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/item" android:background="#88ff55" /> </RelativeLayout>

El resultado:

Como puede ver, el centrado no funciona. Desafortunadamente. (Por cierto, si especifica este 9patch como fondo para TextView, el centrado funciona bien. Si conoce algún artículo, explíquelo, hágamelo saber).

Agregar margen inferior al último elemento en la implementación del adaptador

Eso debería funcionar, pero por alguna razón desconocida todavía no puedo hacer que funcione. No me gusta de esta manera, porque no me gusta modificar las dimensiones en el código.

Asi que

Ya existe una forma imaginaria: construir un XML dibujable con un mapa de bits y un margen en particular. De acuerdo con el concepto de drawables, debería ser posible, pero no puedo encontrar la implementación. Puede ser que alguien lo sepa?

¿Alguna otra idea?


Agregue estas dos líneas en su código XML de ListView:

android:transcriptMode="alwaysScroll" android:stackFromBottom="true"


En su ListView , configure un paddingBottom y clipToPadding="false" .

<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="8dp" android:clipToPadding="false" android:scrollbarStyle="outsideOverlay"/>

  • Esto también funciona para RecyclerView .

  • Solo use android:scrollbarStyle="outsideOverlay" si desea que la barra de desplazamiento no se desborde en el área acolchada.


La respuesta de Clocksmith es la mejor y bastante inteligente. También puede crear una vista de pie de página vacía.


Otra solución podría ser que haga una vista simulada con cierta altura.

En su adaptador en getViewCount return 2.

En getCount devuelve yourData.size + 1.

En getViewType compruebe si el elemento es el último elemento return 2;

Use este tipo en getView para poblar el simulacro.


Supongo que desea agregar un margen solo al último elemento:

De modo que puede hacer de esta manera, en su método getview, el índice del elemento de la lista y verificar si es el último elemento, luego agregar un margen de forma progrma a la vista.


agregue un pie de página vacío en su lista de esta manera:

TextView empty = new TextView(this); empty.setHeight(150); listview.addFooterView(empty);


también puedes hacerlo desde el código si quieres, por ejemplo, aquí reacciono a las diferentes situaciones de EditText:

if(s.toString().length()>0) { contacts_lv.setClipToPadding(false); contacts_lv.setPadding(0,0,0,270*screenDensity); } else { contacts_lv.setClipToPadding(true); contacts_lv.setPadding(0,0,0,0); }