Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LinearLayout not expanding inside a ScrollView

I have a LinearLayout inside a ScrollView that has android:layout_height="fill_parent", but it doesn't expand to the full height of the ScrollView. My layout looks something like:

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 

I can see that the LinearLayout doesn't expand the full height of the ScrollView because in Eclipse in Android Layout Editor, if I select the ScrollView (in the Outline panel) it is highlighted with a red border that fills the screen to the bottom but when I select the LinearLayout its highlight doesn't expand to the bottom of the screen. How can I get it to do so?

The effect I'm trying to achieve is to have some text and a button below it (inside the LinearLayout in level 4 there's just a button). The text can be big enough to need a scrollbar, in which case I want the user to have to scroll down in order to see the button. In case the text is not big enough for a scroll bar, I want the LinearLayout containing the button to stick to the bottom of the screen.

At first I thought I shouldn't post the full XML because it's usually a turn-down to see a huge chunk of code in a question. However, it seems it might be necessary, so here's the full layout.

<?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> 

At the moment I have resorted to android:layout_gravity="bottom" on the problematic LinearLayout, which makes the button stick to the bottom of the screen no matter what. But that also makes the text stick to the bottom of the screen, which is not exactly what I was after.

Update: scratch that, android:layout_gravity="bottom" makes the ScrollView unable to, well, scroll. Other ideas?

like image 266
Felix Avatar asked Apr 08 '10 12:04

Felix


2 Answers

Found the solution myself in the end. The problem was not with the LinearLayout, but with the ScrollView (seems weird, considering the fact that the ScrollView was expanding, while the LinearLayout wasn't).

The solution was to use android:fillViewport="true" on the ScrollView.

like image 177
Felix Avatar answered Sep 21 '22 08:09

Felix


I know this post is very old, For those who don't want to use android:fillViewport="true" because it sometimes doesn't bring up the edittext above keyboard. Use Relative layout instead of LinearLayout it solves the purpose.

like image 45
Hardik4560 Avatar answered Sep 18 '22 08:09

Hardik4560