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
相关产品推荐
相关产品推荐

