15

我在 SO、Google、android 文档上搜索了这里...

但是我找不到带有自定义视图组示例的代码片段,我最多找到一些模糊的解释......

有人可以提供一个吗?你如何创建一个视图组,你可以把它的孩子放在你想要的地方?

4

2 回答 2

14

我认为最简单的例子是 AbsoluteLayout.java 的源代码

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/AbsoluteLayout.java

您需要覆盖 onMeasure 来测量孩子和 onLayout 来定位它们。

如果你愿意,我也可以分享更复杂的 ViewGroup 代码。

于 2011-04-14T15:37:52.863 回答
0

这并不简单,您需要做的就是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)
        )

    }

}
于 2020-10-29T16:44:01.087 回答