LinearLayout no expansión dentro de un ScrollView

? Felix @ | Original: StackOverFlow

Tengo un LinearLayout dentro de un ScrollView que tiene android:layout_height="fill_parent", pero no se expande a toda la altura de la ScrollView . Mi diseño se ve algo como:

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 el LinearLayout no se expande en toda la altura de la ScrollView porque en Eclipse en Android Layout Editor, si selecciono el ScrollView (en el panel Contorno ) se destacó con un borde rojo que llena la pantalla a la parte inferior, pero cuando selecciono el LinearLayout su punto culminante 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 un poco de texto y un botón debajo de ella (dentro de la LinearLayout en el nivel 4 hay sólo 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 es lo suficientemente grande para una barra de desplazamiento, quiero que el LinearLayout que contiene el botón de pegarse a la parte inferior de la pantalla.

Al principio pensé que no debería publicar el XML completo, porque por lo general es un giro hacia abajo para ver un enorme trozo 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>

Por el momento he recurrido a android:layout_gravity="bottom" en la problemática LinearLayout, lo que hace que el botón se adhieren a la parte inferior de la pantalla no importa qué. Pero eso también hace que el palo de texto a la parte inferior de la pantalla, que no es exactamente lo que yo buscaba.

Actualización: cero que, android:layout_gravity="bottom" hace que el ScrollView no se puede, así, de desplazamiento. Otras ideas?

Top 5 Respuesta

1snctln @

¿Puede proporcionar su xml diseño ? Si lo hace, podría permitir a la gente para recrear el tema con el mínimo esfuerzo.

Puede que tenga que establecer

android:layout_weight="1"

para el elemento que desea expandiste

2Felix @

Encontrado la solución a mí mismo en el final. El problema no era con el LinearLayout, pero con la ScrollView (parece extraño, teniendo en cuenta el hecho de que el ScrollView se estaba expandiendo, mientras que el LinearLayout no era ) .

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

3Braj @

He utilizado de forma dinámica para conseguir esto. Tengo un LinearLayout y dentro de esta acostumbrado ScrollView como un niño. Entonces tomo de nuevo LinearLayout y añadir a lo que cada vez Ver u quiere este LinearLayout y luego esta LinearLayout añadir a ScrollView y finalmente agregar este ScrollView a LinearLayout . Entonces u puede conseguir desplazarse en ur ScrollView y nada será dejado a visible.

LinearLayout (Padre ) - ScrollView ( hijo de LinerLayout ) - LinearLayout ( hijo de ScrollView ) - añadir aquí TextView, botones, etc spinner lo que quieres es . Luego agregar este LinearLyout a ScrollView . Bcoz solo hijo para ScrollView complemento aplicable y pasado este ScrollView al área definida LinearLyout.If es exceden del tamaño de la pantalla y luego u conseguirá un Pergamino dentro ScrollView .

4Vishal_Pandey @

En mi caso no he dado el

orientación de LinearLayout ( de ScrollView niño)

Así que por defecto se toma horizontal, pero scrols ScrollView verticalmente, así que por favor verifique si ' android: orientación = " vertical" ' está ajustado a su ScrollView Niño ( En el caso de LinearLayout ) .

Este fue mi caso espera que ayude a alguien

.