Ответ 1
Проблема заключалась в том, что я вызывал setBackground() внутри my View onSizeChanged(). Я реорганизовал код, и теперь он работает.
У меня очень простой пользовательский вид с onMeasure()
overriden. Мой onMeasure()
определяет размер в соответствии с фоном Drawable. Когда представление сначала создается из xml, все работает нормально. Но затем я задал другой фон программно, поэтому View должен изменить размер. Теперь у представления есть другой фон, но он не изменяется и onMeasure()
не вызывается.
Я пробовал все - requestLayout()
, forceLayout()
, invalidate()
, setLayoutParams()
- без какого-либо эффекта. Что я делаю не так? Я просто хочу, чтобы мой просмотр изменялся.
Проблема заключалась в том, что я вызывал setBackground() внутри my View onSizeChanged(). Я реорганизовал код, и теперь он работает.
Вы пробовали очевидную вещь, то есть как объявлен ваш метод?
Если вы не добавили аннотацию @override
, добавьте ее и посмотрите, не говорит ли ваш компилятор, что она не отменяет ничего. Если это так, проверьте подпись имени и метода onMeasure
.
В противном случае убедитесь, что вы понимаете, когда должен быть вызван метод measure()
: Как Android рисует виды.