LinearLayout no se expande dentro de un ScrollView

Resuelto Felix asked hace 54 años • 7 respuestas

Tengo un LinearLayoutinterior ScrollViewque 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 LinearLayoutno expande la altura completa porque ScrollViewen 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 LinearLayoutresalta 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 LinearLayoutnivel 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 LinearLayoutbotó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 ScrollViewno pueda, bueno, desplazarse. ¿Otras ideas?

Felix avatar Jan 01 '70 08:01 Felix
Aceptado

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 LinearLayoutno).

La solución fue utilizar android:fillViewport="true"en ScrollView.

Felix avatar Apr 09 '2010 10:04 Felix

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.

Hardik4560 avatar Sep 14 '2015 07:09 Hardik4560

¿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

snctln avatar Apr 08 '2010 13:04 snctln