动态设置网格布局的行数和列数

时间:2013-04-17 14:25:18

标签: android android-widget

我正在动态地向GridLayout添加linearlayout。我希望它像网格视图一样显示。是否可以计算可以在一行中放置多少线性布局并设置网格布局的列数,或者我应该使用gridview自动对齐它们。

2 个答案:

答案 0 :(得分:3)

如果要根据GridLayout的宽度计算列数,请覆盖onMeasure方法。它提供了widthSpecheightSpec作为参数,您可以使用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()