我正在动态地向GridLayout添加linearlayout。我希望它像网格视图一样显示。是否可以计算可以在一行中放置多少线性布局并设置网格布局的列数,或者我应该使用gridview自动对齐它们。
答案 0 :(得分:3)
如果要根据GridLayout
的宽度计算列数,请覆盖onMeasure
方法。它提供了widthSpec
和heightSpec
作为参数,您可以使用MeasureSpec.getSize()从中获取实际的宽度和高度(以像素为单位)。从那里,根据您刚找到的GridLayout
的宽度计算您想要显示的列数,并使用setColumnCount
使其显示该列数。
答案 1 :(得分:0)
重写GridLayout的onMeasure
即可。示例(在Kotlin中,但应轻松转换为Java):
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
var childWidth = 0
for (i in 0 until childCount) {
val c = getChildAt(i)
if (c.visibility == View.GONE) {
continue
}
val params = c.layoutParams
if (params.width>childWidth) childWidth = params.width
}
val width = MeasureSpec.getSize(widthSpec)
columnCount=width/childWidth
super.onMeasure(widthSpec, heightSpec)
}
尽管@drdaanger在他的回复中提到了我,但我不必requestLayout()
。