LinearLayout non si espande all'interno di ScrollView
-
25-09-2019 - |
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?
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.