LinearLayout no se expande dentro de un ScrollView
Tengo un LinearLayout
interior ScrollView
que lo tiene android:layout_height="fill_parent"
, pero no se expande a toda la altura 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 expande la altura completa porque ScrollView
en Eclipse en Android Layout Editor
, si selecciono ScrollView
(en el panel Contorno) se resalta con un borde rojo que llena la pantalla hasta el fondo, pero cuando selecciono se LinearLayout
resalta no se expande hasta la parte inferior de la pantalla. ¿Cómo puedo conseguir que lo haga?
El efecto que estoy tratando de 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 que el LinearLayout
botón que contiene se quede en la parte inferior de la pantalla.
Al principio pensé que no debería publicar el XML completo porque generalmente es desagradable ver una gran cantidad 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>
De momento he recurrido android:layout_gravity="bottom"
al problemático LinearLayout
, que hace que el botón se quede en la parte inferior de la pantalla pase lo que pase. Pero eso también hace que el texto se pegue a la parte inferior de la pantalla, que no es exactamente lo que buscaba.
Actualización: tache eso, android:layout_gravity="bottom"
hace que ScrollView
no pueda, bueno, desplazarse. ¿Otras ideas?
Al final encontré la solución yo mismo. El problema no estaba en LinearLayout
, sino en ScrollView
(parece extraño, considerando el hecho de que se ScrollView
estaba expandiendo, mientras que LinearLayout
no).
La solución fue utilizar android:fillViewport="true"
en ScrollView
.
Sé que esta publicación es muy antigua, para aquellos que no quieren usarla android:fillViewport="true"
porque a veces no aparece el texto de edición encima del teclado. Utilice el diseño relativo en lugar de LinearLayout para resolver el propósito.
¿Puedes proporcionar tu diseño xml? Hacerlo permitiría a las personas recrear el problema con un mínimo esfuerzo.
Quizás tengas que configurar
android:layout_weight="1"
para el artículo que desea ampliar