Tengo un LinearLayout
interior ScrollView
que tiene android:layout_height="fill_parent"
, pero no se expande a la altura total del ScrollView
. Mi diseño se parece a:
level layout layout_width layout_height
1 LinearLayout fill_parent fill_parent
2 LinearLayout fill_parent wrap_content
3 (some irrelevant stuff)
2 ScrollView fill_parent fill_parent <-- this expands full height
3 LinearLayout fill_parent fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4 TextView fill_parent fill_parent
4 LinearLayout fill_parent wrap_content
Puedo ver que LinearLayout
no se expande la altura completa del ScrollView
porque, en Eclipse Android Layout Editor
, si selecciono el ScrollView
(en el panel Esquema) se resalta con un borde rojo que llena la pantalla hasta el fondo, pero cuando selecciono el LinearLayout
resaltado no se expande a la parte inferior de la pantalla. ¿Cómo puedo conseguir que lo haga?
El efecto que intento lograr es tener algo de texto y un botón debajo (dentro del LinearLayout
nivel 4 solo hay un botón). El texto puede ser lo suficientemente grande como para necesitar una barra de desplazamiento, en cuyo caso quiero que el usuario tenga que desplazarse hacia abajo para ver el botón. En caso de que el texto no sea lo suficientemente grande para una barra de desplazamiento, quiero LinearLayout
que el botón que contiene se pegue en la parte inferior de la pantalla.
Al principio pensé que no debería publicar el XML completo porque generalmente es un rechazo para ver una gran porción de código en una pregunta. Sin embargo, parece que podría ser necesario, así que aquí está el diseño completo.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/video_layout"
android:focusable="true"
style="@style/VideoLayout">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@android:drawable/ic_media_play"
android:foregroundGravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/video_thumb"
android:padding="5dip"
android:background="#454545"/>
</FrameLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
style="@style/VideoTitle"
android:id="@+id/video_title"
android:layout_gravity="center"
android:layout_weight="1"/>
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<!-- this ScrollView expands the full height of the screen.
However, the next LinearLayout does not expand the full height of the ScrollView -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_gravity="fill"
android:orientation="vertical"
android:id="@+id/info_layout">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/info_body"
style="@style/InfoText"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/button_readmore"
android:id="@+id/btn_read_more"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
En este momento he recurrido a android:layout_gravity="bottom"
la problemática LinearLayout
, lo que hace que el botón se pegue en la parte inferior de la pantalla sin importar qué. Pero eso también hace que el texto se pegue en la parte inferior de la pantalla, que no es exactamente lo que buscaba.
Actualización: rasca eso, android:layout_gravity="bottom"
hace que ScrollView
no puedas, bueno, desplazarte. ¿Otras ideas?
android:weight
.