когда меня зовут, и я не знаю, почему - Android - PullRequest
3 голосов
/ 11 марта 2012

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

Когда я добавил следующий фрагмент кода в свою деятельность:

mTextView.setText("random text");

onMeasure () вызывается в пользовательском представлении, т. Е. SetText в текстовом представлении, похоже, вызывает переизмерение другого представления. Поскольку мой код onmeasure () сбрасывает представление нежелательным образом, я хочу избежать этого.

В чем причина вызова onMeasure () в этом случае и как я могу его остановить?

1 Ответ

11 голосов
/ 11 марта 2012

Ответ на ваш вопрос: В линейном макете размер и положение каждого элемента зависит от размеров и положения элементов, которые предшествуют ему. Кроме того, если вы используете размеры макетов для определения размеров элементов вместо фиксированных размеров, более того, размер и положение элемента также зависят от элементов, следующих за ним.

Изменение содержимого одного элемента (в вашем случае вызовом setText()) может изменить размер этого элемента. В результате Android выполняет повторную компоновку, чтобы определить новые размеры и позиции для дочерних элементов LinearLayout, и для этого необходимо измерить все элементы линейной компоновки.

Ответ на Ваш вопрос: Было бы разумно предположить, что onMeasure() можно вызвать в любое время. Хорошим решением было бы изменить onMeasure(), чтобы у него не было побочных эффектов. Вместо этого подождите onSizeChanged(), прежде чем «сбросить представление».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...