собственный пример ViewGroup?

Я искал здесь, в SO, в Google, в документах Android...

Но я не могу найти ни одного фрагмента кода с примером пользовательской группы просмотра, я нахожу в лучшем случае какие-то туманные объяснения...

Может ли кто-нибудь предоставить один? Как вы создаете группу просмотра, в которой вы можете размещать ее дочерние элементы, где хотите?


person speeder    schedule 14.04.2011    source источник
comment
PadLayout — это настраиваемая ViewGroup, которая размещает дочерние представления на равном расстоянии.   -  person Ali    schedule 11.03.2020


Ответы (2)


Я думаю, что самый простой пример — это источник AbsoluteLayout.java.

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

Вам нужно переопределить onMeasure для измерения дочерних элементов и onLayout для их позиционирования.

У меня есть поразительно более сложный код ViewGroup, которым я также могу поделиться, если хотите.

person slund    schedule 14.04.2011
comment
slund было бы неплохо, если бы вы могли поделиться ... можете ли вы указать функции, важные для переопределения для ребенка - person user1169079; 10.04.2012

Это не совсем просто, все, что вам нужно сделать, это вызвать 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)
        )

    }

}
person Osvel Alvarez Jacomino    schedule 29.10.2020