16

I searched here on SO, on Google, on the android docs...

But I cannot find a single snippet of code with a example of custom viewgroup, I find at most some vague explanations...

Can someone provide one? How you make a viewgroup where you can put its children where you want?

D A Vincent
  • 364
  • 2
  • 21
speeder
  • 6,197
  • 5
  • 34
  • 51
  • [PadLayout](https://github.com/Ali-Rezaei/PadLayout) is a custom ViewGroup that lays out child views with equal distance. – Ali Mar 11 '20 at 19:05

2 Answers2

16

I think the simplest example to look at is the source for AbsoluteLayout.java

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

You need to override onMeasure to measure the children and onLayout to position them.

I have strikingly more complicated ViewGroup code I can share as well if you want.

slund
  • 6,367
  • 2
  • 26
  • 19
0

It't quite simple, all you need to do is to call super.onMeasure after calculate the exact dimentions of yout view.

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)
        )

    }

}