【问题标题】:LayoutParams padding applied to parent View but margin to childLayoutParams 填充应用于父视图但边距应用于子视图
【发布时间】:2020-05-06 13:37:11
【问题描述】:

我有两个嵌套的 LinearLayouts - 一个水平列表的垂直列表(我试图制作一个调色板选择器)。

val params = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT
        ).apply {
            val borderWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50f, resources.displayMetrics).toInt()
            setPadding(borderWidth, borderWidth, borderWidth, borderWidth)
            setMargins(0, 0, 0, 10)
        }
        LinearLayoutRow.layoutParams = params
        // add to to tree
        this.addView(LinearLayoutRow)

但是现在发生的情况是,Padding 应用于 Parent LinearLayout,而 margin 应用于 LinearLayoutRow。正如您在图像中看到的,行之间有一点空间,但巨大的 50dp 填充应用于父容器。 我不明白这种行为。 this 顺便说一下扩展类class ColorPalettePicker(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {}

【问题讨论】:

    标签: android android-linearlayout android-layoutparams


    【解决方案1】:

    填充不是 LayoutParams 的一部分。因此,当您调用setPadding() 时,它实际上是在调用父级的setPadding()。你应该这样称呼它

    linearLayoutRow.setPadding(borderWidth, borderWidth, borderWidth, borderWidth)
    

    【讨论】:

    • 谢谢。你能解释为什么它没有显示错误吗? .apply 应该在 LayoutParams 上调用它,所以如果它没有这样的成员函数应该抛出错误?
    • 就像调用内部类中的方法一样。如果内部类没有您要调用的方法,则调用外部类方法。
    【解决方案2】:

    实际上apply里面的setpadding方法不会影响它为父视图设置的LayoutParams。 Set magins 会影响您创建的参数,这意味着它会影响子视图

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多