使自定义视图使用布局权重

Make custom view use layout weight

我正在尝试制作具有以下布局的 android 应用程序

<?xml version="1.0" encoding="utf-8"?>
<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.CustomView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:id="@+id/customView" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:weightSum="2"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/TopLeftText"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center" />

            <TextView
                android:id="@+id/TopRightText"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:weightSum="2"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/BottomLeftText"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center" />

            <TextView
                android:id="@+id/BottomRightText"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

并且应该像这样布置

+---+---+
|       |
|       |
|       |
|   c   |
|       |
|       |
|       |
+---+---+
|   |   |
| t | t |
|   |   |
+---+---+
|   |   |
| t | t |
|   |   |
+---+---+

其中 c 是我的自定义视图,t 是文本视图。我已经设法在垂直模式下使用一种线性布局将文本视图置于网格中,并将其子 layout_weights 设置为 1,然后将水平模式下的子线性布局及其布局权重为 1 的子文本视图。但是出于某种原因,即使设置了权重,我似乎也无法让我的自定义视图共享一半的线性布局。我的屏幕目前看起来更像:

+---+---+
|       |
|       |
|       |
|       |
|       |
|   c   |
|       |
|       |
|       |
|       |
|       |
|       |
|       |
+---+---+
| t | t |
+---+---+
| t | t |
+---+---+

似乎我所做的一切都没有使这个视图占据一半的高度。我的观点类似于:

class CustomView extends View {
    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }

    protected void onDraw(Canvas canvas) {
        // here I just have some code to fill the view in with solid colour
    }
}

class 是从 XML 文件构建的,我试过弄乱 layout_width、layout_height、layout_weight、layout_gravity 但似乎没有什么可以解决的。将不胜感激任何想法

在使用权重时,您应该使用 height/width 的 0dp。使用 wrap_content 有时会导致意外结果。