You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android GridLayout中layout_rowWeight无法均等分配子项宽度问题

GridLayout子项宽度无法均等分配的问题

我在布局中使用GridLayout,设置为2行4列共8个子项,每个子项都添加了layout_rowWeight="1"和layout_columnWeight="1"属性,但实际显示中子项宽度分配不均——前三个子项宽度较大,最后一个子项宽度偏小。

以下是我的布局XML代码:

<GridLayout
    android:rowCount="2"
    android:columnCount="4"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/qrcode_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="21dp"
            android:layout_height="21dp"
            android:src="@drawable/ic_qrcode" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/qrcode_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/grade_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="20dp"
            android:layout_height="23dp"
            android:src="@drawable/ic_grade" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="11dp"
            android:text="@string/grade_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/study_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="19dp"
            android:layout_height="24dp"
            android:src="@drawable/ic_study" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="11dp"
            android:text="@string/study_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/map_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/ic_map" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/map_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/calendar_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="22dp"
            android:layout_height="22dp"
            android:src="@drawable/ic_calendar" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="11dp"
            android:text="@string/calendar_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/network_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="28dp"
            android:layout_height="21dp"
            android:src="@drawable/ic_internet" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/network_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/contact_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="23dp"
            android:layout_height="20dp"
            android:src="@drawable/ic_contact" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="13dp"
            android:text="@string/contact_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/more_item"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1">

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/ic_more" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/more_item"
            android:textColor="#363636"
            android:textSize="12sp" />

    </LinearLayout>

</GridLayout>

解决方法

问题出在子项的layout_width属性——默认的wrap_content会让GridLayout先给子项分配内容所需的宽度,再用权重平分剩余空间。如果子项内容宽度不一致,最终显示的总宽度就会有差异。

只需要给每个子项的LinearLayout添加android:layout_width="0dp",让控件完全按照权重分配父布局的宽度,忽略自身内容的宽度限制:

<LinearLayout
    android:id="@+id/qrcode_item"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="0dp" <!-- 添加这一行 -->
    android:layout_rowWeight="1"
    android:layout_columnWeight="1">
    <!-- 内部控件保持不变 -->
</LinearLayout>

对所有8个子项都做同样的修改,就能实现4列宽度完全均等的效果。

内容的提问来源于stack exchange,提问作者Hhry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:41:18