【问题标题】:How to set LayoutParams properly如何正确设置 LayoutParams
【发布时间】:2019-09-18 13:51:05
【问题描述】:

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

  • 为了让我在展示我的代码之前更容易理解,表格如下所示:

如您所见,每个表格单元格都是一个带有“测试”作为文本的按钮,我无法让这个 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,但没有找到答案。

我做错了什么使我的表格消失了,我怎样才能使单元格适合表格大小?

【问题讨论】:

    标签: android android-layout kotlin


    【解决方案1】:
    1. 你写 table.width/5 所以你可能在 0..4 中使用 j

    2. 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,因为在这个阶段父级的高度是未知的。我希望你能根据屏幕大小来计算这个高度。

    3. 通过这样的程序化设置,您不需要表格布局,垂直内填充父级的水平线性视图就足够了。

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

    【讨论】:

    • 关于 1 - 编辑问题时出错,谢谢。 您可能可以使用 android:stretchColumns好提示,现在单元格在行内拉伸/收缩(我使用 android:shrinkColumns="*" 来允许收缩)。知道如何使每一行拉伸或收缩以使表格也垂直适合吗?
    • 更多来自文档: TableRow 的子项不需要在 XML 文件中指定 layout_width 和 layout_height 属性。 TableRow 始终强制这些值分别为 ViewGroup.LayoutParams.MATCH_PARENT 和 ViewGroup.LayoutParams.WRAP_CONTENT。
    猜你喜欢
    • 2019-04-07
    • 2011-02-27
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多