我有两个嵌套的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) {}
填充不是LayoutParams的一部分。因此,当您调用setPadding()
时,它实际上是在调用父级的setPadding()
。您应该这样称呼它
linearLayoutRow.setPadding(borderWidth, borderWidth, borderWidth, borderWidth)
实际上,内部方法setpadding不会影响为父视图设置的LayoutParams。设置magins将影响您创建的参数,这意味着它会影响子视图