Pregunta

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

Me puede ver que el LinearLayout no se expande en toda la altura de la ScrollView porque en Eclipse en Android Layout Editor, si selecciono la ScrollView (en el panel de esquema) que se resalta con un borde rojo que llena la pantalla a la parte inferior pero cuando selecciono la LinearLayout su punto culminante no se expande a 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 él (dentro de la LinearLayout en el nivel 4 sólo 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 con el fin de 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 que se adhieren a la parte inferior de la pantalla.

Al principio pensé que no debería registrar el XML completo porque es por lo general un giro hacia abajo para ver una gran parte de código en una pregunta. Sin embargo, parece que podría ser necesaria, 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 el momento en que he recurrido a android:layout_gravity="bottom" en el LinearLayout problemática, lo que hace que el palo de botón 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, lo cual no es exactamente lo que estaba buscando.

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

¿Fue útil?

Solución

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

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

Otros consejos

Sé que este post es muy antiguo, para aquellos que no quieren usar android:fillViewport="true" porque a veces no abrir el EditarTexto parte superior del teclado. Utilizar disposición relativa en lugar de LinearLayout que resuelve el propósito.

Se puede proporcionar a su disposición xml? Si lo hace, permitiría a las personas para recrear el problema con el mínimo esfuerzo.

Puede ser necesario configurar

android:layout_weight="1"

para el elemento que desea expandiste

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 quieren a este LinearLayout y entonces este LinearLayout añadir a ScrollView y finalmente añadir esta ScrollView a LinearLayout. Entonces u puede conseguir de desplazamiento en ur ScrollView y nada se dejó al visibles.

LinearLayout (Padre) - ScrollView (hijo de LinerLayout) - LinearLayout (hijo de ScrollView) - añadir aquí Textview, botones, etc spinner lo quieres. A continuación, añadir esta LinearLyout a ScrollView. Bcoz un solo hijo para ScrollView complemento aplicable y por última vez este ScrollView a LinearLyout.If zona definida está exceda del tamaño de la pantalla a continuación, u conseguirá un desplazamiento dentro de ScrollView.

En mi caso no he dado el

  

orientación de LinearLayout (Child de ScrollView)

Así que por defecto se toma horizontal, pero scrols ScrollView verticalmente, así que por favor, compruebe si 'android: orientation = "vertical"'. Se ajusta a su niño de ScrollView (En el caso de LinearLayout)

  

Esta fue mi caso la esperanza de que ayude a alguien

.

La solución es utilizar

android:fillViewport="true"

en Vista de desplazamiento y, además, tratar de uso

"wrap_content" en lugar de "fill_parent" como "fill_parent"

Ahora está en desuso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top