Android ListView relleno de contenido sin mover ListView altura?
Tengo un ListView con un montón de elementos dentro de él. ¿Cómo puedo hacer que los elementos superior e inferior tengan un margen superior de 10dp para el elemento superior y el margen inferior de 10dp para el elemento inferior? Ahora puedo hacer esto con el relleno o el margen en el ListView pero el resultado es que cuando usted rueda el borde del ListView es ahora 10dp de la parte inferior de la pantalla. De todos modos alrededor de esto? También he intentado fijar los márgenes dentro del método getView de mi adaptador pero no veo ninguna opción del margen para AbsListView.LayoutParams. Cualquier ayuda sería grande.
Gracias
- ¿Dónde está una lista de los códigos de idioma obsoletos que Java todavía utiliza?
- Solicitud de Https, autenticación en Android
- Optimización del compilador de código Java en Android
- Error android.permission.WRITE_SECURE_SETTINGS
- Cómo seleccionar valores aleatorios de un rango dado
- Cómo implementar Page Curl en MuPDF
- Aumenta automáticamente un valor en Firebase
- Cómo rotar la imagen en imageview en el botón haga clic en cada vez?
- Api de audio de baja latencia para Android?
- El icono de 3 líneas no se anima en una imagen más pequeña en el Cajón de navegación
- ¿Cómo leer el archivo de texto de los números de flotación de manera eficiente con Java + LibGDX?
- comparar java epoch cadena con php epoch fecha
- Error StackOverflow, excepción View.inflate
El truco es incluir android:clipToPadding="false"
en la definición de la vista, por ejemplo:
<ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="16dip" android:paddingBottom="16dip" android:clipToPadding="false" />
Puede obtener espacio en la parte superior e inferior de su ListView, dentro de la región de desplazamiento, utilizando encabezados y pies de página. He aquí un ejemplo rápido:
Defina la vista de relleno, que denominé header_footer.xml:
<?xml version="1.0" encoding="utf-8"?> <View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="10dp"/>
Ahora su método onCreate
se parece a esto, suponiendo que ha nombrado ListView listView
:
final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View headerFooter = inflater.inflate(R.layout.header_footer, null); listView.addFooterView(headerFooter); listView.addHeaderView(headerFooter);
Y luego configure su adaptador.
¿Por qué no sólo comprobar la posición del elemento en relación con el tamaño de su lista:
Relleno:
public View getView(int position, View convertView, ViewGroup parent) { //recycle views and whatever else you normally would do goes here.. //... //... if (position == 0){ convertView.setPadding(0, 10, 0, 0); //padding on top for top item } else if (position == getCount() - 1){ convertView.setPadding(0, 0, 0, 10); //padding on bottom for bottom item } else{ convertView.setPadding(0, 0, 0, 0); //no padding } }
Para el uso de márgenes
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(left, top, right, bottom); convertView.setLayoutParams(lp);
Ex:
public View getView(int position, View convertView, ViewGroup parent) { //recycle views and whatever else you normally would do goes here.. //... //... LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); if (position == 0){ lp.setMargins(0, 10, 0, 0); //margin on top for top item } else if (position == getCount() - 1){ lp.setMargins(0, 10, 0, 10); //margin on bottom for bottom item } else{ lp.setMargins(0, 0, 0, 0); //no margin } convertView.setLayoutParams(lp); }
Esto es siempre que haya implementado el método getCount () correctamente para su adaptador.
- Android View PerformClick () y callOnClick () diferencia
- Lo que activa la medida () de una vista para ser llamada