Search code examples
androidandroid-layoutlayoutandroid-linearlayout

fit size of parent layout


I have a simple linear layout and want to divide the screen into two equally sized parts.

In the upper one, I want to put a SurfaceView that has exactly the same size as its parent, i.e. half of the screen. Unfortunately, it always either takes all the screen or nothing (depending on the configuration). Why is that and how can I change it?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="2"
    android:orientation="vertical">

    <LinearLayout android:id="@+id/layoutUpperDaw"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#192832">

        <com.example.MySurvfaceView
            android:id="@+id/id_mySurfaceView"
            android:layout_width="match_parent"

            android:layout_height="0pt"
            android:layout_weight="1"

            OR

            android:layout_height="match_parent"

            >

        </com.example.MySurvfaceView>

    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#193222">

        ...
    </LinearLayout>
</LinearLayout>

Solution

  • When you provide weight you have to set height or weight to 0dp as below.

    <LinearLayout android:id="@+id/layoutUpperDaw"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#192832">
    

    and

    <com.example.MySurvfaceView
                android:id="@+id/id_mySurfaceView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                >
    

    Update: Answer above is correct about weight usage, make sure either hight or width is 0dp at all places where you used weight.

    You don't really need nested LinearLayout. Following should work.

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    
            <com.example.MySurvfaceView
                android:id="@+id/id_mySurfaceView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                >
    
            </com.example.MySurvfaceView>
    
    
    
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#193222">
    
    
        </LinearLayout>
    </LinearLayout>