首页 > 解决方案 > Android GridView:以父级为中心的两个相等宽度和高度的列

问题描述

这么简单的要求怎么可能做不到呢?

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="6dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingTop="18dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:layout_weight="1"
                android:paddingLeft="12dp"
                android:background="@drawable/box_background"
                android:columnCount="2"
                >
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />
                <TextView
                    android:layout_gravity="center"
                    android:padding="4dp"
                    android:text="text"
                    android:textSize="24dp"
                    />

            </GridLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:background="#fff"
                android:paddingLeft="6dp"
                android:paddingRight="6dp"
                android:text="Box title" />
        </RelativeLayout>

    </LinearLayout>

产生这种垃圾:

在此处输入图像描述

WTF是第三排上面的空隙吗?

是否有可能——我发誓不是——得到两个居中的列,行间距均匀?

标签: android-layout

解决方案


使用此添加 android:layout_columnWeight="1"到 gridlayout 儿童

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="6dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/grid_layout"
                android:columnCount="2"
                android:layout_below="@id/title"
                android:orientation="horizontal"
                android:useDefaultMargins="true"
                android:alignmentMode="alignBounds"
                >

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                   android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                    android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                    android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                    android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                    android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

                <TextView
                    android:layout_gravity="center_horizontal"
                    android:padding="4dp"
                    android:gravity="center"
                    android:text="text"
                    android:layout_columnWeight="1"
                    android:textSize="20sp"
                    />

            </GridLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:background="#fff"
                android:paddingLeft="6dp"
                android:id="@+id/title"
                android:textSize="16sp"
                android:paddingRight="6dp"
                android:text="Box title" />

        </RelativeLayout>

    </LinearLayout>



</LinearLayout>

输出 :

在此处输入图像描述


推荐阅读