¿Cómo estiro un elemento de la interfaz de usuario para llenar el espacio vertical en una vista?

Tengo un diseño que contiene tres filas o segmentos en mi vista de Android.

La primera región de diseño tiene una altura fija basada en el contenido de la región con: layout_height = "wrap_content".

El siguiente segmento contendrá un ListView con su capacidad de desplazamiento incorporada, me gustaría que esto ocupara el espacio disponible de la pantalla.

El segmento final siempre tendrá una altura fija basada en un valor absoluto o: layout_height = "32dp". Me gustaría este tercer segmento "acoplado" a la parte inferior de la vista.

Como referencia, el siguiente XAML logra lo que quiero

<Grid>
   <Grid.RowDefinitions>
       <RowDefinition Height="auto" />
       <RowDefinition Height="*" />
       <RowDefinition Height="32" />
   </Grid.RowDefinisions>
</Grid>

¿Es esto posible a través de XML de diseño de Android? Y si es así, ¿cómo se puede hacer esto?

preguntado el 30 de agosto de 11 a las 23:08

3 Respuestas

Configure android: layout_height = "fill_parent", android: layout_height = "match_parent" o android: layout_weight = "1".

El último tomará todo el espacio restante no utilizado en su diseño principal, el primero a veces hará que otros elementos desaparezcan de la vista.

Respondido 31 ago 11, 03:08

Nunca he visto "match_parent" pero android: layout_weight = "1" junto con android: height = "0dp" hicieron el truco. - Kevin

Si está usando api nivel 8 o superior, use match_parent en lugar de fill_parent. Ver developer.android.com/reference/android/view/…. Es el reemplazo. - kabuko

Definitivamente esto es posible. Puede hacer esto de muchas maneras, la más fácil de las cuales, en mi opinión, es simplemente usar un LinearLayout. Algo como:

<LinearLayout layout_height="fill_parent">
    <firstitem layout_height="wrap_content" layout_width="fill_parent" />
    <ListView layout_height="fill_parent" layout_width="fill_parent" />
    <bottomitem layout_height="32dp" layout_width="fill_parent" />
</LinearLayout>

Utilizan dp no sp. sp es generalmente para tamaños de fuente, dp para todo lo demás.

Por cierto, aquí hay un buen para comenzar con los objetos de diseño comunes.

Respondido 31 ago 11, 03:08

Sí - "dp" no "sp", eso es lo que quise decir :) buena aclaración - Kevin

Solo como un FYI, el XML en esta respuesta fue mi enfoque original y no funcionó. El segundo "fill_parent" en el elemento ListView tomó el resto del espacio de la pantalla y empujó el elemento inferior fuera de la pantalla. - Kevin

Ahh, ya lo he visto suceder a veces. Querrás usar layout_weight como notó entonces. Yo suelo preferir layout_height="wrap_content" encima 0dp, pero cualquiera debería funcionar. - kabuko

¿Has probado layout_width = "fill_parent"?

Respondido 31 ago 11, 03:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.