【问题标题】:Android GridLayout Equal Column WidthsAndroid GridLayout 等列宽
【发布时间】:2014-04-20 06:21:40
【问题描述】:

真的不可能在 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>

... 将最右边的按钮留在明显比其他三个更宽的列的中心。 (使用按钮文本,您可以轻松获得更糟糕的示例。)

我阅读了有关 GridLayouts 中多余空间分布的 Android 文档,但似乎很明显,在这种情况下,即使是列宽也经常(甚至可能是通常)需要,我不得不相信我遗漏了一些明显的东西/容易。

【问题讨论】:

标签: android layout android-gridlayout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    记住如果您的项目的 MinSdk 使用支持库

    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"
    

    UPD:

    如果您以编程方式制作 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);
    

    (对于每个子视图)

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2016-03-09
      • 1970-01-01
      • 2019-04-08
      • 2014-06-02
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      相关资源
      最近更新 更多