我正在创建一个由10X10单元格组成的表格,它(在创建所有单元格之后)不适合其父级。
如您所见,每个表格单元格都是一个以“ Test”作为文本的按钮,我无法使此10X10网格展开以填充其父级(视图水平退出屏幕,而垂直填充)
我正在以编程方式创建每个单元格,如下所示:
val table = findViewById<TableLayout>(R.id.table)
for (i in 0..9) { //10 rows inside the table
val row = TableRow(this)
for (j in 0..9) { //10 cells inside every row
val cell = Button(this)
cell.layoutParams = TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT
)
cell.text = "test"
cell.setTextColor(Color.RED)
cell.setBackgroundColor(Color.WHITE)
cell.setPadding(0, 0, 0, 0)
row.addView(cell)
}
table.addView(row)
}
下一步是更改为每个单元格设置layoutParams
的方式,我尝试过更改每个单元格的尺寸,如下所示:
cell.layoutParams = TableRow.LayoutParams(
//table = the view that contains all cells
table.width/5, //make the cell width = 20% of the parent width
table.height/10 //make the cell height= 10% of the parent height
)
由于某种原因,这使整个表消失了,并将layoutparams设置为MATCH_PARENT
与WRAP_CONTENT
具有相同的效果。
我已经检查了android - setting LayoutParams programmatically和LayoutParams,但没有找到答案。
我在做什么导致表消失,如何使单元格适合表的大小?
答案 0 :(得分:1)
您编写table.width/5
,因此您可能在0..4
TableLayout的子级不能指定layout_width属性。宽度始终为MATCH_PARENT。但是,可以定义layout_height属性。
使用 android:stretchColumns 使表格正确调整按钮宽度。
但是
TableRow的子级不需要在XML文件中指定layout_width和layout_height属性。 TableRow始终将这些值分别强制设置为ViewGroup.LayoutParams.MATCH_PARENT和ViewGroup.LayoutParams.WRAP_CONTENT。
这意味着,按照书的方式,您不能在垂直方向上用桌子填满父母。但是通过钩子或弯钩,您可以强制每个按钮的高度恰好是整个高度的1/10。
您不能做的是在构建布局时采用 table.height ,因为在这一阶段尚不清楚父级的高度。我希望您可以根据屏幕尺寸来计算此高度。
使用这种程序设置,您不需要表格布局,垂直线内填充父级的水平线性视图就足够了。
使用ConstraintLayout可以将元素的宽度和高度指定为父级的百分比,请参见https://android.jlelse.eu/whats-new-in-constraint-layout-1-1-0-acfe30cfc7be