如何正确设置LayoutParams

时间:2019-09-18 13:51:05

标签: android android-layout kotlin

我正在创建一个由10X10单元格组成的表格,它(在创建所有单元格之后)不适合其父级。

  • 为使在显示代码之前更容易理解,该表如下所示:

enter image description here

如您所见,每个表格单元格都是一个以“ 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_PARENTWRAP_CONTENT具有相同的效果。


我已经检查了android - setting LayoutParams programmaticallyLayoutParams,但没有找到答案。

我在做什么导致表消失,如何使单元格适合表的大小?

1 个答案:

答案 0 :(得分:1)

  1. 您编写table.width/5,因此您可能在0..4

  2. 中使用 j
  3. 请参见reference for TableLayout

      

    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 ,因为在这一阶段尚不清楚父级的高度。我希望您可以根据屏幕尺寸来计算此高度。

  4. 使用这种程序设置,您不需要表格布局,垂直线内填充父级的水平线性视图就足够了。

  5. 使用ConstraintLayout可以将元素的宽度和高度指定为父级的百分比,请参见https://android.jlelse.eu/whats-new-in-constraint-layout-1-1-0-acfe30cfc7be