Android 如何正确设置LayoutParams

Android 如何正确设置LayoutParams,android,android-layout,kotlin,Android,Android Layout,Kotlin,我正在创建一个由10X10个单元格组成的表,但它(创建所有单元格后)不适合其父单元格。 为了便于在显示代码之前理解,该表如下所示: 如您所见,每个表格单元格都是一个按钮,文本为“Test”,我无法将这个10X10网格展开以填充其父单元格(视图水平退出屏幕,而不会垂直填充) 我以编程方式创建每个单元格,如下所示: val table = findViewById<TableLayout>(R.id.table) for (i in 0..9) { //10

我正在创建一个由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设置为
MATCH\u PARENT
具有与
WRAP\u CONTENT
相同的效果


我查过了,但还没有找到答案

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

  • 您编写了
    table.width/5
    ,因此您可能在0..4中使用j

  • 见:

    TableLayout的子级不能指定layout_width属性。宽度始终与父项匹配。但是,可以定义布局高度属性

    使用android:stretchColumns
    让表格正确调整按钮宽度

    但是,

    TableRow的子级不需要在XML文件中指定布局宽度和布局高度属性。TableRow始终将这些值分别强制为ViewGroup.LayoutParams.MATCH_父级和ViewGroup.LayoutParams.WRAP_内容

    这意味着,根据书本,不能用表格垂直填充父级。但是,无论是用钩还是用钩,你都可以强迫每个按钮的高度正好是整个高度的1/10

    您不能做的是在构建布局时获取table.height
    ,因为在这个阶段,父对象的高度还不知道。我希望你能根据屏幕大小来计算这个高度

  • 使用这样的编程设置,您不需要表格布局,填充父级的垂直视图中的水平线性视图就足够了

  • 使用ConstraintLayout,可以将元素的宽度和高度指定为父元素的百分比,请参见


  • 关于1-编辑问题时出错,谢谢。您可能可以使用android:stretchColumns,很好的提示,现在单元格正在行内拉伸/收缩(我使用了
    android:shrinkColumns=“*”
    来进行低收缩)。知道如何使每一行拉伸或收缩以使表格也垂直适合吗?来自文档的更多信息:表格行的子项不需要在XML文件中指定布局宽度和布局高度属性。TableRow始终将这些值分别强制为ViewGroup.LayoutParams.MATCH_父级和ViewGroup.LayoutParams.WRAP_内容。
      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           
            )