LinearLayout non espansione all'interno di un ScrollView

? Felix @ | Original: StackOverFlow

Ho un LinearLayout all'interno di un ScrollView che ha android:layout_height="fill_parent", ma non si espande per tutta l'altezza della ScrollView . Il mio layout simile 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

Vedo che la LinearLayout non espandere l'intera altezza del ScrollView, perché in Eclipse in Android Layout Editor, se si seleziona la ScrollView ( nel pannello Outline ) si è evidenziato con un bordo rosso che riempie lo schermo verso il basso, ma quando seleziono il LinearLayout sua highlight non espande al fondo della schermata . Come posso ottenere a farlo ?

L'effetto che sto cercando di realizzare è quello di avere un testo e un pulsante sotto ( all'interno del LinearLayout a livello 4 c'è solo un pulsante ) . Il testo può essere abbastanza grande da avere bisogno di una barra di scorrimento, in questo caso voglio che l'utente abbia a scorrere verso il basso per vedere il pulsante . Nel caso in cui il testo non è abbastanza grande per una barra di scorrimento, voglio che la LinearLayout contenente il pulsante per attacchi al fondo dello schermo .

In un primo momento ho pensato che non avrei dovuto postare il XML pieno perché di solito è un turn-down per vedere un pezzo enorme di codice in una domanda . Tuttavia, sembra che potrebbe essere necessario, quindi ecco il layout 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>

Al momento ho ricorso a android:layout_gravity="bottom" sulla problematica LinearLayout, che rende la levetta verso il basso dello schermo non importa quale . Ma che fa anche il bastone testo alla parte inferiore dello schermo, che non è esattamente quello che cercavo .

Update: scratch che, android:layout_gravity="bottom" fa il ScrollView incapace di, beh, scorrere . Altre idee ?

Top 5 Risposta

1snctln @

Potete fornire il layout xml ? Ciò permetterebbe alle persone di ricreare il problema con il minimo sforzo .

Potrebbe essere necessario impostare

android:layout_weight="1"

per l'elemento che si desidera espanso

2Felix @

Trovato la soluzione io stesso alla fine . Il problema non era con il LinearLayout, ma con il ScrollView ( sembra strano, considerando il fatto che il ScrollView è stato espansione, mentre il LinearLayout non era ) .

La soluzione era quella di utilizzare android:fillViewport="true" sul ScrollView .

3Braj @

Ho usato dinamicamente per ottenere questo . Ho un LinearLayout e all'interno di questa usato ScrollView come un bambino . Poi prendo ancora LinearLayout e aggiungi cosa mai Visualizza u vuole questo LinearLayout e poi questo LinearLayout aggiungi al ScrollView e infine aggiungere questo ScrollView a LinearLayout . Allora u può ottenere scorrere in ur ScrollView e nulla sarà lasciato a vista .

LinearLayout ( Parent ) - ScrollView ( figlio di LinerLayout ) - LinearLayout ( figlio di ScrollView ) - aggiungere qui TextView, Bottoni, filatrice ecc Whatever U Want . Quindi aggiungere questo LinearLyout a ScrollView . Bcoz un solo bambino per ScrollView add applicabile e ultimo questo ScrollView all'area definita LinearLyout.If è superare dalla dimensione dello schermo poi u otterrà una Scroll all'interno ScrollView .

4Vishal_Pandey @

Nel mio caso non ho dato il

orientamento LinearLayout ( Child ScrollView )

Quindi per default prende orizzontale, ma scrols ScrollView verticalmente, quindi controllare se ' android: orientamento = " verticale" ' è impostato Child del ScrollView ( In caso di LinearLayout ) .

Questo è stato il mio caso spera aiuta qualcuno

.