View.onMeasure() не вызывается

У меня очень простой пользовательский вид с onMeasure() overriden. Мой onMeasure() определяет размер в соответствии с фоном Drawable. Когда представление сначала создается из xml, все работает нормально. Но затем я задал другой фон программно, поэтому View должен изменить размер. Теперь у представления есть другой фон, но он не изменяется и onMeasure() не вызывается.

Я пробовал все - requestLayout(), forceLayout(), invalidate(), setLayoutParams() - без какого-либо эффекта. Что я делаю не так? Я просто хочу, чтобы мой просмотр изменялся.

Ответ 1

Проблема заключалась в том, что я вызывал setBackground() внутри my View onSizeChanged(). Я реорганизовал код, и теперь он работает.

Ответ 2

Вы пробовали очевидную вещь, то есть как объявлен ваш метод?

Если вы не добавили аннотацию @override, добавьте ее и посмотрите, не говорит ли ваш компилятор, что она не отменяет ничего. Если это так, проверьте подпись имени и метода onMeasure.

В противном случае убедитесь, что вы понимаете, когда должен быть вызван метод measure(): Как Android рисует виды.