自定义 ViewGroup 示例?

Posted

技术标签:

【中文标题】自定义 ViewGroup 示例?【英文标题】:custom ViewGroup example? 【发布时间】:2011-08-05 12:07:35 【问题描述】:

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

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

有人可以提供吗?您如何创建一个可以将其子项放在您想要的位置的视图组?

【问题讨论】:

PadLayout 是一个自定义 ViewGroup,它以相等的距离布置子视图。 【参考方案1】:

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

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

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

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

【讨论】:

slund 如果你能分享一下就好了……你能指定为孩子重写的重要功能吗【参考方案2】:

这并不简单,您只需在计算出您的视图的确切尺寸后调用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)
        )

    


【讨论】:

以上是关于自定义 ViewGroup 示例?的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百九十八回:自定义View实例四:获取ViewGroup中的边距)

自定义ViewGroup

自定义控件自定义ViewGroup 在ViewGroup中显示TextView

Android自定义ViewGroup及自定义属性

自定义View--继承自ViewGroup

自定义ViewGroup