Расскажите про реализацию метода View.onMeasure()
onMeasure() — метод, необходимый, чтобы определить размеры View и его “детей”. Данный метод должен быть переопределен таким образом, чтобы быстро и точно возвращать размеры View и его “детей”. Так же есть установки на View от его родителей, который накладывают дополнительные ограничения.
Сама же реализация выглядит примерно так:
- На вход onMeasure() поступает два аргумента: widthMesureSpec и heightMesureSpec.
В каждом из них закодировано два значения, сам размер и режим. Режим закодирован с помощью сдвига на 30 битов. Всего есть три режима:
MeasureSpec.UNSPECIFIED = 0 — родитель не наложил никаких ограничений по размеру на View
MeasureSpec.EXACTLY = 1 — родитель задал точные размеры View
MeasureSpec.AT_MOST = 2 — родитель задал максимальный размер View
2. Вычисление самих размеров
Учитывая поступившие аргументы и ограничения от родителя необходимо расчитать размеры View
3. Вызвать метод setMeasuredDimension()/вызвать super.onMeasure(), чтобы передать вычисленные значения дальше. Если этого не сделать то вылетит исключение IllegalStateException
Учитесь как в игре
AI Sprints — обучение профессиям с ИИ
Уровни, XP, достижения и рейтинги. Увидите прогресс каждый день — мотивация не пропадает даже через месяцы обучения
- Геймификация: уровни, опыт, достижения — как в игре, но навыки реальные
- Карта навыков: визуальный прогресс по каждой технологии — видите, что освоили
- Рейтинги: сравнивайте себя с другими студентами — здоровая конкуренция
AI Challenge — собери чат-бота за 5 дней
Бесплатный марафон по AI-инжинирингу. Cursor + OpenAI, 60 минут в день — без опыта в программировании. К пятнице у вас будет рабочий чат-бот с памятью в браузере.
- Практика с первого дня, без теории «в стол»
- Готовый проект в портфолио к концу недели
- Старт в любой день — учитесь в своём темпе