Android - LinearLayout in ScrollView in Relativelayout

10,257

Solution 1

Ok, I've made it. All I had to do is setting LinearLayout that is inside of ScrollView to

layout_width="wrap_content"
layout_gravity="center_horizontal"
android:orientation="vertical"

The ScrollView to

layout_width="fill_parent"
layout_gravity="center_horizontal"
layout_height="wrap_content"

And at the end I've put that ScrollView into new LinearLayout with parameters as following:

layout_width="fill_parent" 
layout_height="fill_parent" 
gravity="center_vertical" 
orientation="vertical"

So the ScrollView and it's child Layout are setting buttons center horizontaly and the outer LinearLayout is setting them center verticaly. :-)

Solution 2

Try changing the layout_width of lin2 to wrap_content instead of fill_parent.

Share:
10,257
Seraphis
Author by

Seraphis

Updated on June 04, 2022

Comments

  • Seraphis
    Seraphis almost 2 years

    I have a little problem with layouts. I have made RelativeLayout in which I put two LinearLayouts (1 and 2) and between them ScrollView with LinearLayout. Next I set that ScrollView to be placed under linearLayout2 and above linearLayout1. But LinearLayout inside that ScrollView isn't set as it's parent.

    Here's the code, maybe I've made a mistake:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"        
            android:padding="6dip"
            android:layout_alignParentTop="true"
            android:id="@+id/lin1"
            android:layout_weight="1">
    
    </LinearLayout>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_weight="1" android:id="@+id/lin3" 
            android:layout_height="60dip">          
    
    </LinearLayout>
    
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:scrollbars="horizontal"
    android:layout_below="@id/lin1"
    android:layout_above="@id/lin3" android:id="@+id/ScrollView">
    
    <LinearLayout
            android:layout_width="fill_parent"                      
            android:orientation="vertical"
            android:id="@+id/lin2" 
            android:layout_height="fill_parent"  
            android:layout_gravity="center_vertical|center_horizontal">
    
        <Button android:text="@string/button1" 
            android:id="@+id/button1" 
            android:layout_gravity="center" 
            android:layout_width="280dip" 
            android:layout_height="60dip">
        </Button>
    
        <Button android:text="@string/button2"
            android:id="@+id/button2" 
            android:layout_gravity="center" 
            android:layout_width="280dip" 
            android:layout_height="60dip">
        </Button>
    
        <Button android:text="@string/button3" 
            android:id="@+id/button3" 
            android:layout_gravity="center" 
            android:layout_width="280dip" 
            android:layout_height="60dip">
        </Button>
    
        <Button android:text="@string/button4"
            android:id="@+id/button4" 
            android:layout_gravity="center" 
            android:layout_width="280dip" 
            android:layout_height="60dip">
        </Button>
    
    
    </LinearLayout>
    </ScrollView>
    

    Any ideas, why LinearLayout inside of ScrollView is bigger than the ScrollView?

    EDIT: So far I've noticed that LinearLayout inside of ScrollView moves outside when I set layout_gravity="center_vertical". It looks like setting center refers to main layout (RelativeLayout).