【发布时间】:2011-08-05 12:07:35
【问题描述】:
我在 SO、Google、android 文档上搜索过这里...
但是我找不到带有自定义视图组示例的单个 sn-p 代码,我最多找到一些模糊的解释...
有人可以提供吗?您如何创建一个可以将其子项放在您想要的位置的视图组?
【问题讨论】:
-
PadLayout 是一个自定义 ViewGroup,它以相等的距离布置子视图。
我在 SO、Google、android 文档上搜索过这里...
但是我找不到带有自定义视图组示例的单个 sn-p 代码,我最多找到一些模糊的解释...
有人可以提供吗?您如何创建一个可以将其子项放在您想要的位置的视图组?
【问题讨论】:
我认为最简单的例子是 AbsoluteLayout.java 的源代码
您需要覆盖 onMeasure 来测量子项并覆盖 onLayout 来定位它们。
如果你愿意,我也可以分享更复杂的 ViewGroup 代码。
【讨论】:
这并不简单,您只需在计算出您的视图的确切尺寸后调用super.onMeasure。
class ProportionalConstraintLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
val exactWidth = 100 //do something to calculate the view widht
val exactHeight = 100 //do something to calculate the view height
setMeasuredDimension(exactWidth, exactHeight)
super.onMeasure(
MeasureSpec.makeMeasureSpec(exactWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(exactHeight, MeasureSpec.EXACTLY)
)
}
}
【讨论】: