如何实现列宽均匀的GridView?附现有GridLayout代码
实现GridLayout均匀列宽的解决方案
嘿,要让你的GridLayout每一列宽度均匀其实很简单,核心就是利用权重分配来让每列平分可用宽度。下面给你两种可行的方案,你可以根据自己的Android版本需求来选:
方案一:通用权重法(兼容所有API级别)
GridLayout的子View默认会根据自身内容占用宽度,我们只需要给每个ImageView添加两个属性,就能让它们均匀分配列宽:
android:layout_width="0dp":让View的宽度完全由权重控制,而不是内容android:layout_columnWeight="1":给每一列设置相同的权重,这样所有列会平分父布局的宽度
修改后的完整代码如下:
<GridLayout android:id="@+id/back" android:layout_width="match_parent" android:layout_height="match_parent" android:rowCount="3" android:columnCount="5"> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <!-- 剩下两行的ImageView也同样添加这两个属性即可 --> <ImageView android:src="@drawable/noTexture" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_columnWeight="1"/> <!-- ... 其他ImageView重复上述配置 ... --> </GridLayout>
方案二:API 24+简化法
如果你只需要兼容Android 7.0(API级别24)及以上版本,可以直接给GridLayout添加android:useDefaultMargins="true",再结合android:columnCount,系统会自动帮你均匀分配列宽。不过这种方式不如权重法灵活,建议还是用方案一的通用写法。
小提示
- 如果你想让行高也均匀,只需要把
android:layout_height="0dp"和android:layout_rowWeight="1"加到每个子View上就行 - 记得确保所有同列的子View权重一致,不然列宽会不一样哦
内容的提问来源于stack exchange,提问作者Woton Sampaio
相关产品推荐
相关产品推荐

