安卓GridLayout等宽列宽

37

在 Android GridLayout 中真的不可能轻松地强制让列宽相等吗?尝试了显而易见的布局...

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="4"
    android:rowCount="8"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_gravity="center"
        android:text="Button 1" />
    <Button
        android:id="@+id/button2"
        android:layout_gravity="center"
        android:text="Button 2" />
    <Button
        android:id="@+id/button3"
        android:layout_gravity="center"
        android:text="Button 3" />
    <Button
        android:id="@+id/button4"
        android:layout_gravity="center"
        android:text="Button 4" />

</GridLayout>

......将最右侧的按钮置于一个明显比其他三个更宽的列的中心。(如果更改按钮文本,你可以很容易地得到更糟糕的示例。)

我阅读了有关在GridLayout中分配多余空间的Android文档,但似乎即使在这种情况下,通常(也许甚至是典型的)需要列宽也是如此明显,以至于我必须相信我错过了一些显而易见/简单的东西。


尝试阅读关于使用GridLayout的文章,可能会有所帮助。http://android-developers.blogspot.co.nz/2011/11/new-layout-widgets-space-and-gridlayout.html - GhostDerfel
2个回答

45

只需为GridLayout的子项使用列权重即可:

android:layout_width="0dp"
android:layout_columnWeight="1"

请注意:如果您的项目的MinSdk < API 21,请使用支持库:

implementation 'com.android.support:appcompat-v7:27.1.1' 
implementation 'com.android.support:gridlayout-v7:27.1.1'

请使用android.support.v7.widget.GridLayout代替GridLayout。 当使用支持库时,请不要忘记使用app命名空间:
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="0dp"
app:layout_columnWeight="1"

更新:

如果您以编程方式创建GridLayout,请使用GridLayout.Spec。例如:

GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams(
    GridLayout.spec(GridLayout.UNDEFINED, 1f),
    GridLayout.spec(GridLayout.UNDEFINED, 1f)
);

layoutParams.width = 0;

yourChildView.setLayoutParams(layoutParams);
yourGridLayout.addView(yourChildView);

(适用于每个子视图)

32

改用表格布局,并指定拉伸列。

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textViewLeaveRemainingDescription"
    android:stretchColumns="0,1">

    <TableRow>
        <Button
            android:id="@+id/button1"
            android:layout_gravity="center"
            android:text="Button 1" />

        <Button
            android:id="@+id/button3"
            android:layout_gravity="center"
            android:text="Button 3" />
    </TableRow>

    <TableRow>
        <Button
            android:id="@+id/button2"
            android:layout_gravity="center"
            android:text="Button 2" />

        <Button
            android:id="@+id/button4"
            android:layout_gravity="center"
            android:text="Button 4" />
    </TableRow>
</TableLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接