Какой метод необходимо переопределить для кастомного расчета размеров View

«Какой метод необходимо переопределить для кастомного расчета размеров View» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для кастомного расчета размеров View необходимо переопределить метод onMeasure(int widthMeasureSpec, int heightMeasureSpec). В нем вы определяете логику измерения и устанавливаете итоговые размеры через setMeasuredDimension(width, height).

Пример:

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    val desiredWidth = 200
    val desiredHeight = 100

    val widthMode = MeasureSpec.getMode(widthMeasureSpec)
    val widthSize = MeasureSpec.getSize(widthMeasureSpec)
    val heightMode = MeasureSpec.getMode(heightMeasureSpec)
    val heightSize = MeasureSpec.getSize(heightMeasureSpec)

    val width = when (widthMode) {
        MeasureSpec.EXACTLY -> widthSize
        MeasureSpec.AT_MOST -> min(desiredWidth, widthSize)
        else -> desiredWidth
    }

    val height = ... // аналогично для высоты

    setMeasuredDimension(width, height)
}