为什么 'layout_column' 没有将元素放在 GridLayout 中?

Why does the 'layout_column' does not place the element in a GridLayout?

我有以下示例 xml 布局,取自 here(删除了一些不重要的部分):

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:alignmentMode="alignBounds"
    android:columnOrderPreserved="true"
    android:columnCount="4"
    >

    <TextView
        android:text="Email setup"
        android:textSize="32dip"
        android:layout_columnSpan="4"
        android:layout_gravity="center_horizontal"
        />

    <TextView
        android:text="Email address:"
        android:layout_gravity="right"
        />

    <EditText
        android:ems="10"
        />

    <TextView
        android:text="Password:"
        android:layout_column="0"
        android:layout_gravity="right"
        />

    <EditText
        android:ems="8"
        />

    <Space
        android:layout_row="4"
        android:layout_column="0"
        android:layout_columnSpan="4"
        android:layout_gravity="fill"
        />

    <Button
        android:text="Next"
        android:layout_row="5"
        android:layout_column="2"
        />
</GridLayout>

我正在将最后一行中 'Next' 按钮的 android:layout_column 参数从 3 更改为 2,但这不会改变它在布局中的位置:

根据我对网格布局的理解,我有几列,参数 layout_column 指定放置元素的列。但这似乎不起作用。元素的位置不会改变。

你的第一列在Password右边结束(至少它是android:layout_column="0"表示)

这也是第 1 列的开头。但您尚未在此列中指定任何元素。所以它跨越 GridLayout.

的其余宽度

column span 只设置为 2 更好,按钮的 span 设置为 2 android:layout_gravity="center_horizontal"

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:alignmentMode="alignBounds"
    android:columnOrderPreserved="true"
    android:columnCount="2">

    <TextView
        android:text="Email setup"
        android:textSize="32dip"
        android:layout_columnSpan="2"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:text="Email address:"
        android:layout_gravity="right"/>

    <EditText
        android:layout_column="1"
        android:ems="10"/>

    <TextView
        android:text="Password:"
        android:layout_column="0"
        android:layout_gravity="right"/>

    <EditText
        android:layout_column="1"
        android:ems="8"/>

    <Space
        android:layout_row="4"
        android:layout_column="0"
        android:layout_gravity="fill"/>

    <Button
        android:text="Next"
        android:layout_row="5"
        android:layout_gravity="center_horizontal"
        android:layout_columnSpan="2"
        android:layout_column="0"/>

</GridLayout>

您必须设置 android:columnOrderPreserved="false" 才能实现此 work.Then 更改 layout_column 将起作用