Какие методы надо переопределить у наследников ViewGroup чтобы управлять его размерами и позиционированием содержимого

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

Ответ

Основные методы для управления размерами и позиционированием в ViewGroup:

  1. onMeasure() - определяет размеры ViewGroup и его дочерних элементов
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // Измеряем детей
    measureChildren(widthMeasureSpec, heightMeasureSpec);
    // Устанавливаем собственные размеры
    setMeasuredDimension(calculatedWidth, calculatedHeight);
}
  1. onLayout() - размещает дочерние элементы
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    for (int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        child.layout(childLeft, childTop, childRight, childBottom);
    }
}
  1. generateLayoutParams() - создает LayoutParams для дочерних элементов

Дополнительно могут потребоваться:

  • checkLayoutParams() - проверка параметров
  • generateDefaultLayoutParams() - дефолтные параметры