0

我想在 xml 中并排绘制三个正方形,以便它们水平填充屏幕(每边减去 12 dp 的边距)。根据这篇文章,似乎可以用表格布局来做这件事,但我想知道是否有更好的方法。这是我使用嵌套 LinearLayouts 的尝试,它绘制垂直填充整个屏幕的矩形,但其他方面我正在寻找:

<?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:layout_margin="12dp"
    android:background="#ffffff"
    android:baselineAligned="false"
    android:orientation="horizontal" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/rectangle" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="@drawable/rectangle" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="@drawable/rectangle" >
    </LinearLayout>
</LinearLayout>
4

3 回答 3

1

尝试将三个内部线性布局的 android:layout_width="match_parent" 更改为 "wrap_content"。

我刚刚使用以下 xml 代码进行了测试。请注意,您的版本有两个更改:

1 我将 match_parent 更改为三个子布局的 wrap_content。2 由于我没有你的背景图片,所以我只使用三种不同的颜色作为背景。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="12dp"
    android:background="#ffffff"
    android:baselineAligned="false"
    android:orientation="horizontal" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#ff121212" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="#ff676767" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="#ffababab" >
     </LinearLayout>
</LinearLayout>

我得到这个屏幕:

我的测试结果

因此,如果将 match_parent 更改为 wrap_content 但不起作用,我猜你的背景图片太大了。

另外,转向对 layout_weight 的理解。Layout_weight 不决定元素的大小,它只有在每个元素从父布局中需要必要的大小后才起作用,然后父布局根据 layout_weight 为每个元素分配剩余的大小。

于 2012-12-24T06:18:12.257 回答
0

尝试这种方式来获取边距和高度。

<?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:background="#ffffff"
    android:baselineAligned="false"
    android:orientation="horizontal" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginLeft="12dp"
        android:background="@drawable/rectangle" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="@drawable/rectangle" >
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:layout_marginRight="12dp"
        android:background="@drawable/rectangle" >
    </LinearLayout>
</LinearLayout>
于 2012-12-24T06:18:47.720 回答
0

似乎最好的解决方案是创建一个具有覆盖的自定义视图组件onMeasure()

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
于 2012-12-26T18:19:35.440 回答