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

Android GridLayout如何通过XML设置子控件高度填充屏幕

解决方案:用GridLayout实现两行均分屏幕高度

当然可以通过GridLayout的XML设置实现你的需求,不需要换布局!问题出在当前GridLayout和TextView的几个关键属性没配置对,我帮你调整一下:

核心修改点:

  • 把GridLayout的android:layout_height从wrap_content改成match_parent,让它占满整个屏幕高度
  • 给GridLayout添加android:rowCount="2",明确指定两行布局(不指定也能自动计算,但手动设置更清晰)
  • 把每个TextView的android:layout_height从固定的100dp改成0dp,然后添加android:layout_rowWeight="1",这样每行的三个TextView会自动均分该行的高度
  • 把TextView的android:layout_gravity改成fill,确保TextView完全填充单元格的宽高

修改后的完整XML代码:

<androidx.constraintlayout.widget.ConstraintLayout 
    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="ddx.project_dnd.MainActivity">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="3"
        android:rowCount="2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorPrimaryDark"
            android:gravity="center"
            android:text="Tile1" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:text="Tile2" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorPrimary"
            android:gravity="center"
            android:text="Tile3" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:text="Tile4" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorPrimary"
            android:gravity="center"
            android:text="Tile5" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_gravity="fill"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:text="Tile6" />

    </GridLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

补充说明:

  • 我把你原来的android.support.constraint.ConstraintLayout换成了androidx.constraintlayout.widget.ConstraintLayout,这是现在官方推荐的版本,如果你还在使用旧的support库,可以改回原来的包名,不影响核心功能
  • layout_rowWeight和layout_columnWeight的作用类似LinearLayout的weight属性,当View的宽/高设为0dp时,会根据权重分配剩余空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:10