适合父布局的大小

时间:2017-07-05 20:10:31

标签: android android-layout layout android-linearlayout

我有一个简单的线性布局,并希望将屏幕分成两个大小相等的部分。

在上面一个中,我想放一个与其父级完全相同的SurfaceView,即屏幕的一半。不幸的是,它总是占用所有屏幕或没有(取决于配置)。 为什么这样,我该如何改变呢?

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

2 个答案:

答案 0 :(得分:1)

当您提供weight时,您必须将身高或体重设置为0dp,如下所示。

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

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

更新:上面的答案对于体重使用是正确的,请确保在您使用体重的所有地方,高度或宽度均为0dp。

你真的不需要嵌套的LinearLayout。以下应该有效。

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

答案 1 :(得分:0)

编程:

  1. 找到父布局。

    GridLayout gridLayout =(GridLayout)findViewById(R.id.gridLayout);`

  2. 获取测量高度和父级宽度。

    int height = gridLayout.measuredHeight();

    int width = gridLayout.measuredWidth();

  3. 3.计算子视图的高度和宽度。例如,两个孩子在父母身上占据50%的身高但是占据父母的全宽:

    int childHeight = height/2;
    int childWidth = width;
    

    4.获取LayoutParams的实例,具体取决于父类型。

    GridLayout.LayoutParams params = new GridLayout.LayoutParams();
    

    5。在布局参数上设置高度和宽度。

     params.width = childWidth;
     params.height = childHeight;
    

    6.创建子视图并设置布局参数。

    ImageView imageview = new ImageView();
    imageview.setLayoutParams(params);
    

    7.将子视图添加到父级。

     gridLayout.addView(ImageView);