2015-09-19 2 views
0

Я нахожусь в главе 4 программы разработки приложений для Android 4, и это говорит мне, что и размерное значение , и режим извлекаются из значений widthMeasureSpec и heightMeasureSpec, переданных методу onMeasure() пользовательского представления. Должны ли они не быть какой-либо другой структурой данных, чем целочисленный примитив, чтобы выполнить это? Являются ли эти целые числа закодированными таким образом, что можно было бы вручную переопределить их значения?Как метод MeasureSpec.getMode() извлекает режим из целочисленного значения?

ответ

1

Режим либо ТОЧНО, AT_MOST, либо НЕ УСТАНАВЛИВАЕТСЯ. Так что технически для хранения режима требуется всего два бита. Если вы посмотрите на их значения, ТОЧНО 0x80000000, AT_MOST - 0x40000000, а UNSPECIFIED - 0x00000000. Они берут верхние два бита int и ORING их с размером, чтобы получить MeasureSpec. Вероятно, это был запах от раннего Android, когда устройства действительно не имели большой памяти, поэтому они пытались сохранить все, что могли.

+0

Спасибо, что отвечает на вопрос отлично. –

+1

Да, я сделал двойной прием, когда впервые увидел MeasureSpec, поэтому я посмотрел на код, чтобы узнать, что происходит, - вот как я мог ответить на ваш вопрос. –

 Смежные вопросы

  • Нет связанных вопросов^_^