Search code examples
androidandroid-layoutlayoutruntimescale

How to scale an Android layout object during runtime?


I want to set the width of a LinearLayout to half of the screen width dynamically in my UI initialization. I have a RelativeLayout wrapped around the LinearLayout, the hierarchy is the following:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical" 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" >

      <LinearLayout 
            android:id="@+id/left_linear_layout" 
            android:layout_alignParentLeft="true" 
            android:layout_height="fill_parent" 
            android:layout_width="155dp" <!--want to set this to 1/2 screen width-->
            android:orientation="vertical">
            ...
      </LinearLayout>
      <LinearLayout
            android:id="@+id/right_linear_layout" 
            android:layout_alignParentRight="true" 
            android:layout_height="fill_parent" 
            android:layout_width="385dp"><!--want to set this relative to screen width as well-->
            ....
       </LinearLayout>
</RelativeLayout>

Alternatively, can this problem be solved using View instead of Layout? Any suggestion is appreciated!


Solution

  • You can do this by using layout_weight, but you'll need to add some invisible views for padding. For instance the following would make your top panel half the screen width:

    <RelativeLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        xmlns:android="http://schemas.android.com/apk/res/android">
            <LinearLayout 
                        android:id="@+id/left_linear_layout" 
                        android:layout_alignParentLeft="true" 
                        android:layout_height="fill_parent" 
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:orientation="vertical"
                        >
                ...
            </LinearLayout>
            <!-- need this view to fill the other half of the screen -->
            <View 
                        android:id="@+id/spacer" 
                        android:layout_toRightOf="@id/left_linear_layout" 
                        android:layout_height="fill_parent" 
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        />
    
        ....
    </RelativeLayout>
    

    The amount each view will take up is layout_weight/total_layout_weight. In this case total_layout_weight = 1+1 = 2 and each view has a layout_weight of 1, so each view takes up 1/2 of the screen.