Domanda

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

Posso vedere che il LinearLayout non espande l'intera altezza del file ScrollView perché in Eclipse in Android Layout Editor, se seleziono il ScrollView (nel pannello Struttura) è evidenziato con un bordo rosso che riempie lo schermo fino in fondo ma quando seleziono il LinearLayout la sua evidenziazione non si espande nella parte inferiore dello schermo.Come posso farlo?

L'effetto che sto cercando di ottenere è quello di avere del testo e un pulsante sotto di esso (all'interno del file LinearLayout nel livello 4 c'è solo un pulsante).Il testo può essere abbastanza grande da richiedere una barra di scorrimento, nel qual caso voglio che l'utente debba scorrere verso il basso per vedere il pulsante.Nel caso in cui il testo non sia abbastanza grande per una barra di scorrimento, voglio il file LinearLayout contenente il pulsante da attaccare alla parte inferiore dello schermo.

All'inizio ho pensato che non avrei dovuto pubblicare l'XML completo perché di solito è un rifiuto vedere un'enorme porzione 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 fatto ricorso android:layout_gravity="bottom" sulla problematica LinearLayout, che fa sì che il pulsante rimanga nella parte inferiore dello schermo, qualunque cosa accada.Ma questo fa sì che il testo rimanga attaccato alla parte inferiore dello schermo, il che non è esattamente quello che cercavo.

Aggiornamento: grattalo, android:layout_gravity="bottom" fa il ScrollView incapace, beh, di scorrere.Altre idee?

È stato utile?

Soluzione

Alla fine ho trovato la soluzione da solo.Il problema non era con il LinearLayout, ma con il ScrollView (sembra strano, considerando il fatto che il ScrollView era in espansione, mentre il LinearLayout non lo era).

La soluzione era usare android:fillViewport="true" sul ScrollView.

Altri suggerimenti

So che questo post è molto vecchio, Per coloro che non vogliono usare android:fillViewport="true" perché a volte non far apparire l'EditText sopra la tastiera. Utilizzare il layout relativo al posto di LinearLayout risolve lo scopo.

Si può fornire il vostro XML layout? In questo modo avrebbe permesso alle persone di ricreare il problema con il minimo sforzo.

Si potrebbe essere necessario impostare

android:layout_weight="1"

per l'elemento che si desidera espanso

ho usato in modo dinamico per ottenere questo. Ho un LinearLayout e all'interno di questa usato ScrollView come un bambino. Allora prendo di nuovo LinearLayout e aggiungi che cosa mai Vedere u vuole questo LinearLayout e poi questo LinearLayout aggiungi al ScrollView e, infine, aggiungere questo ScrollView a LinearLayout. Quindi u può ottenere di scorrimento in ur ScrollView e nulla sarà lasciato al visibile.

LinearLayout (Parent) - ScrollView (figlio di LinerLayout) - LinearLayout (figlio di ScrollView) - aggiungere qui textView, Bottoni, filatrice ecc qualunque u vuole. Quindi aggiungere questo LinearLyout a ScrollView. Bcoz un solo bambino per ScrollView aggiuntivo applicabile e ultimo questo ScrollView a LinearLyout.If zona definita è superare dalla dimensione dello schermo poi u otterrà uno scorrimento all'interno ScrollView.

Nel mio caso non ho dato il

  

orientamento della LinearLayout (Child ScrollView)

Per impostazione predefinita, ci vuole orizzontale, ma scrols ScrollView in verticale, in modo da controllare se 'android: orientation = "vertical"'. È impostato per il vostro di ScrollView bambino (Nel caso di LinearLayout)

  

Questo è stato il mio caso speranze aiuta qualcuno

.

La soluzione è quella di utilizzare

android:fillViewport="true"

su vista Scorrimento ed inoltre cercare di utilizzo

"wrap_content" invece di "fill_parent" come "fill_parent"

è deprecato ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top