记一次相当艰辛的安卓GridLayout单元格合并

参考内容:https://blog.csdn.net/weixin_39251617/article/details/79711668

这次来的需求中,有个单元格合并的内容,要把动态生成的表格的某一列分类合并。

A a1 a11
A a2 a21
B b1 b11

比如这种数据,A就要合并成一个单元格。

我想了下应该没那么难,就像是html做个计算器嘛!

百度安卓Table,出来一堆tablelayout的内容。看了好一阵后觉得不太对,后来才知道应该用GridLayout。

GridLayout的属性:

android:columnCount=“3” 这个是固定的,数据有三列

里面的TextView的属性:

android:layout_columnWeight=“1” 这个控制每一格平均宽度

android:layout_rowSpan=“2”
android:layout_rowWeight=“1” 这两个连用,表示一格占两行

这样,我基本可以撸一个计算器出来了。
但是要动态产生,必须用java代码去写。。。。
textView.set。。。里面根本就没有啊!
灵机一动把这些参数加到style.xml里面,用textView.setTextAppearance去绑定这些style,结果失败了!(为什么失败还不知道)

最后找到攻略了。要先new GridLayout.LayoutParams();
在这个param里面去设置rowSpec 跟columnSpec 。

最后的解决方式(伪代码)


// 增加一个TextView到GridLayout
add2Table(内容,占行数){
    
    
        GridLayout.LayoutParams params = new GridLayout.LayoutParams();
        params.rowSpec =GridLayout.spec(GridLayout.UNDEFINED, 占行数, 1f);
        params.columnSpec =GridLayout.spec(GridLayout.UNDEFINED,1f);
        TextView textView = new TextView(ctx);
        textView.setText(内容);
        gridLayout.addView(textView,params);
}
// 对数据循环加入(BigList 是ABCD之类的大类,每个元素中包含abcd)
BigList.forEach(A->
	smallList = A.getSmallList()
	add2table(A.getText(),smallList.size);// A占行数跟包含的abcd数量有关
	smallList.forEach(a->
		add2table(a.getText(),1);// a占一行
	)
)

)

猜你喜欢

转载自blog.csdn.net/u012452555/article/details/110492188