пример пользовательской группы просмотра?

#android #viewgroup

#Android #viewgroup

Вопрос:

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

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

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

Комментарии:

1. PadLayout — это пользовательская группа просмотра, которая размещает дочерние виды на равном расстоянии.

Ответ №1:

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

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

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

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

Комментарии:

1. было бы неплохо, если бы вы могли поделиться… можете ли вы указать функции, которые важно переопределить для дочернего элемента

Ответ №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)
        )

    }

}