Quiero mostrar un botón debajo de ListView
. El problema es que, si ListView
se amplía (elementos agregados ...), el botón se saca de la pantalla.
Probé una LinearLayout
con pesas (como se sugiere en Android:? Por qué no hay maxHeight de Vista ), pero tampoco tengo los pesos mal o simplemente no funcionó.
Además, encontré en alguna parte la sugerencia para usar un RelativeLayout
. A ListView
continuación, se establecería encima del botón con el android:layout_above
parámetro.
El problema con esto es que no sé cómo colocar el botón después. En el ejemplo que encontré, la Vista debajo de ListView
se ajustó usando android:layout_alignParentBottom
, pero no quiero que mi botón se adhiera a la parte inferior de la pantalla.
¿Alguna idea además de usar el método setHeight y algunos cálculos del espacio requerido?
Editar: tengo muchas respuestas útiles.
La solución de bigstone y user639183 casi funcionó perfectamente. Sin embargo, tuve que agregar un margen / relleno adicional en la parte inferior del botón, ya que aún se empujaría a la mitad de la pantalla (pero luego se detendría)
La respuesta de Adinia con el diseño relativo solo está bien si desea que el botón esté fijo en la parte inferior de la pantalla. No es lo que pretendía, pero aún podría ser útil para otros.
La solución de AngeloS fue la que elegí al final, ya que creó los efectos que quería. Sin embargo, hice dos cambios menores
LinearLayout
alrededor del botón:Primero, como no quería tener ningún valor absoluto en mi diseño, cambié
android:layout_height="45px"
awrap_content
, que también funciona bien.En segundo lugar, como quería que el botón estuviera centrado horizontalmente, que solo es compatible con vertical
LinearLayout
, cambié android: Orientación = "horizontal" a "vertical".
AngeloS también declaró en su publicación inicial que no estaba seguro de si el
android:layout_weight="0.1"
parámetro en elLinearLayout
entornoListView
tuvo algún efecto; ¡Lo intenté y realmente lo hace! Sin, el botón vuelve a salir de la pantalla.
fuente
android:layout_alignParentBottom="true"
. Pero para ser claros, ¿desea que el botón permanezca adjunto a la parte inferior de ListView cuando hay pocos elementos? Si es así, vea lo que dice Rich.Respuestas:
Tuve este problema exacto y para resolverlo creé dos separados
LinearLayouts
para albergar elListView
yButton
respectivamente. A partir de ahí, puse ambos en otroLinear Layout
y puse ese contenedorandroid:orientation
envertical
. También configuré el peso delLinearLayout
que albergaba elListView
a,0.1
pero no sé si eso tiene algún efecto. Desde allí, puede establecer la altura del contenedor inferior (que tiene su botón) a la altura que desee.EDITAR esto es lo que quiero decir:
La solución anterior arreglará el botón en la parte inferior de la pantalla.
Para que el botón flote al final de la lista, cambie la altura de
ListView01
awrap_content
:fuente
<div
etiquetas en HTML ... es solo un contenedor y esta solución definitivamente funciona.Resolví este problema en el código, estableciendo la altura de la vista de lista solo si tiene más de 5 elementos:
Tenga en cuenta que configuré la altura máxima en 5.5 veces la altura de un solo elemento, por lo que el usuario sabrá con certeza que hay algo de desplazamiento que hacer. :)
fuente
En su última edición, solo tiene que agregar también
android:layout_above="@+id/butt1"
su código ListView.Y para mostrarte (y a todos los que intentaron una respuesta antes) que realmente no necesitas usar más de uno
RelativeLayout
, aquí tienes tu código corregido :y el resultado , usando alguna lista aleatoria:
fuente
Usando
LinearLayout
, establezca la altura de suListView
yButton
aywrap_content
agregue un peso = 1 aListView
. Esto debería funcionar como quieras.Y sí, configure el
layout_gravity
delButton
abottom
fuente
Encontré una manera de hacer esto sin usar contenedores anidados, inspirada en la solución de AngeloS.
Usé un
LinearLayout
con orientación vertical, que tiene unListView
y un botón. Configuré elandroid:layout_weight="0.1"
para elListView
.Se las arregla para que el botón se pegue siempre al final de la lista. Y el botón no sale de la pantalla cuando la lista crece.
fuente
android:layout_height="wrap_content"
LinearLayout, como en su solución, está funcionando perfectamente, y no solo en 4.4.3, pero como Sparkle no lo mencionó, lo probématch_parent
antes.RelativeLayout
es una solución, si no desea que el botón se quede demasiado cerca del fondo, puede agregar márgenes (rellenar un botón lo rompería porque usa un fondo de 9 parches y establece su propio relleno).Sería lo mismo si usara a
LinearLayout
: la forma de lograr lo que desea es establecer elListView
en altura = 0 y peso = 1, y para el botón altura = contenido_envío y peso = 0.(establecer ambos en wrap_content, como dijo user639183, no limitaríaListView
la altura).fuente
ListView
altura del 'Probablemente pueda hacer que esto funcione utilizando contenedores anidados. Es posible que deba envolver el botón en un segundo contenedor (interior) para que ocupe más espacio y simplemente alinear el botón con la parte superior del contenedor interior.
Posible algo como esto:
Disposición relativa
-- Vista de la lista
-- Disposición relativa
---- Botón
Usando las diferentes opciones de alineación en los dos contenedores, debería poder hacer que esto funcione.
fuente
android:layout_marginTop="30dip"
para el Botón, si quieres más espacio entre la Lista y el Botón, por ejemplo.Esta es la forma más limpia de hacerlo:
Es similar a la solución de Angelos pero no necesita el diseño lineal que envuelve ListView. También puede usar un FrameLayout que es más ligero en comparación con un LinearLayout para envolver el Button.
fuente
La idea se describe en las muy buenas soluciones por:
Ambos parecen funcionar perfectamente al menos en v4.4.3.
Todavía tuve que pasar algo de tiempo escribiendo código de prueba para verificarlo y confirmar cada método. A continuación se muestra el código de prueba mínimo y autónomo requerido.
El diseño se basa en la solución de Sparkle, ya que contiene menos diseños anidados. También se ha actualizado para reflejar las comprobaciones actuales de LINT.
Activity proporciona el código repetitivo para probar la solución por sí mismo.
Siéntase libre de agregar o mejorar, ya que esta es una "wiki comunitaria".
fuente
Intente usar RelativeLayout con el botón en la parte inferior. Establezca la altura del diseño como "wrap_content". No lo he probado. Solo idea
fuente
en LinearLayout, solo agréguelo
android:layout_weight="1"
a ListViewfuente
Lo siguiente es lo que funcionó para mí ...
Nota: Params.width = ... Debe configurarse también ...
El ejemplo anterior es cuando usa TableRow y ListView dentro de TableRow ...
fuente
envolver contenido en diseño lineal
en Vista de lista agregar: android: layout_weight = "1"
en tu botón establece altura fija
fuente
Si desea que el contenido debajo de la vista de lista se mueva hacia abajo a medida que se agregan elementos a la lista, pruebe esta solución:
Agregue relleno positivo en la parte inferior de la vista de lista y relleno negativo en la parte superior del "pie de página". Esto funcionará en un diseño lineal o relativo.
fuente
Dado que no hay ningún atributo MaxHeight, lo mejor que puede hacer es establecer la altura de ListView en un valor establecido o usar
wrap_content
.fuente
Resolví esto colocando ListView dentro de ScrollView. A Lint no le gustó, pero agregando un minHeight y configurando fillViewport en verdadero, tengo un buen resultado.
fuente