Layout Weights do not work inside a ScrollView

AndroidAndroid Layout

Android Problem Overview


I want to assign layout weights to several items within a LinearLayout inside of a ScrollView. However, the ScrollView ignores the LinearLayout weightSum.

My goal is to divide the layout with weights of 2, 1, 1 (for a total sum of 4), but this does not work properly inside of a ScrollView.

How can I solve this layout problem?

main.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:weightSum="4">

        <LinearLayout android:id="@+id/logo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" 
            android:layout_weight="2"
            android:background="#FFFFFF" />
	  
        <LinearLayout android:id="@+id/logo1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" 
            android:layout_weight="1"
            android:background="#000000" />
		
				    
        <LinearLayout android:id="@+id/logobutton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_weight="1" 
            android:background="#4B4B4B" />

    </LinearLayout>
</ScrollView>

Android Solutions


Solution 1 - Android

I have faced this problem before. Just use android:fillViewport="true" in your ScrollView and it will fill up the screen.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true" >

Solution 2 - Android

This won't work as you have done it. The child view of a ScrollView should be set to wrap_content. If you set it to fill_parent, it will fill the area of the ScrollView and never scroll, because it won't be larger than the ScrollView.

The idea of layout_weight is to fill a specific area proportionately.

You should set all of the child LinearLayouts layout_height to either wrap_content or a specific size (in dp) and the parent LinearLayout layout_height to wrap_content

As said you need to remove the additional

> xmlns:android="http://schemas.android.com/apk/res/android"

if it's not the root (first) element of the layout.

Solution 3 - Android

In my experience, fillviewport=true works bit strange.

I solved this problem by wrapping LinearLayout with another Layout like FrameLayout.

I hope this helps.

Solution 4 - Android

Add below line in your ScrollView it will be work fine.

Only single child must be there for ScrollView

android:fillViewport="true"

Solution 5 - Android

just put this in your scroll view:

android:fillViewport="true"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMIP TECHView Question on Stackoverflow
Solution 1 - AndroidAkhilView Answer on Stackoverflow
Solution 2 - AndroidDavid ScottView Answer on Stackoverflow
Solution 3 - AndroidAndy SinView Answer on Stackoverflow
Solution 4 - AndroidManju S BView Answer on Stackoverflow
Solution 5 - AndroidAli KebView Answer on Stackoverflow