Intereting Posts
LG L90 не устанавливает драйверы debug usb Покупка в приложении: получите имя или идентификатор учетной записи Google Play, запрашивающей покупку Пользовательские макеты уведомлений и цвета текста Android: сбой при повороте, горизонтальный и вертикальный Рисовать линию через текст в текстовом виде Как изменить цвета Drawable в Android? Сложный пример ListView со сложными данными и сложной компоновкой каждой строки? Как показать цифровую клавиатуру Android Edittext – Прозрачные промежутки Android.bluetooth.IBluetooth.createBond () не найден в 4.2.1, но работает в более ранних версиях ОС Square Dagger IllegalStateException: адаптер модуля для класса MyApplicationModule не может быть загружен Попытка проверить, существует ли файл во внутреннем хранилище Как установить цвет плитки для загрузки карты google? Как использовать blender на Android Android Drawable: растровое изображение повторного воспроизведения слоя не загружается, когда полностью покрывается

Двухпроходный макет интерфейса: почему?

Я заметил, что Android, WPF и Silverlight следуют шаблону двухпроходного макета. Существует рекурсивный метод Measure (), который вызывается для определения размера элемента, возможно, несколько раз. Затем вызывается рекурсивный метод Layout / Arrange (), который определяет точное положение детей в своем родительском элементе управления и также устанавливает конечный размер элемента управления.

Мой вопрос: почему это разделение на два прохода, особенно когда для некоторых типов элементов управления Measure () не может вычислить фактический размер элемента управления, не устанавливая положения детей? Есть ли какой-то тип макета меньшинства, который стал возможным благодаря этому?

Я пытаюсь создать свой собственный инструментарий пользовательского интерфейса, и в настоящее время я склоняюсь к шаблону Layout () с одним проходом, но я хотел бы убедиться, насколько это разумно или нет.

Спасибо, что прочитали это 🙂

Шон

Solutions Collecting From Web of "Двухпроходный макет интерфейса: почему?"

Причиной двух проходов является то, что любой элемент структуры может влиять на оставшееся свободное пространство других.

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

Различные панели в иерархии задают элементам, какой размер им нужен в первом проходе, затем распределяют пространство между ними в соответствии с природой каждой панели и, наконец, информируют каждый элемент его выделенного пространства.

EDIT: Еще несколько объяснений

Основным недостатком однопроходного макета является то, что вы обрабатываете каждый элемент последовательно. Первый элемент занимает определенное пространство, а остальные – остальные. Почему этот элемент первый? Попробуйте свой алгоритм с другим порядком элементов, и у вас будут разные результирующие макеты.

Макет с двумя проходами имитирует параллельное поведение, при котором каждый элемент влияет на весь макет.