LayoutParams填充应用于父视图,但给子视图添加边距

问题描述 投票:0回答:2

我有两个嵌套的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)

但是现在发生的是,将填充应用于父级LinearLayout,而将边距应用于LinearLayoutRow。如您在图像中看到的,行之间有很小的空间,但是巨大的50dp填充应用于父容器。我不明白这种行为。 this是扩展类class ColorPalettePicker(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {}wrong padding

android android-linearlayout android-layoutparams
2个回答
1
投票

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.