Я заметил, что Android, WPF и Silverlight следуют шаблону двухпроходного макета. Существует рекурсивный метод Measure(), который вызывается для определения размера элемента, возможно, несколько раз. Затем вызывается метод рекурсивного Layout/Arrange(), который определяет точное положение детей в своем родительском элементе управления и также устанавливает конечный размер элемента управления.Двухпроходный интерфейс: почему?
Мой вопрос: почему это разделение на два прохода, особенно если для некоторых типов элементов управления Measure() не может вычислить фактический размер элемента управления, фактически не выкладывая положения детей? Есть ли какой-то тип макета меньшинства, который стал возможным благодаря этому?
Я пытаюсь создать свой собственный инструментарий для пользовательского интерфейса, и в настоящее время я склоняюсь к шаблону Layout() с одним проходом, но я хотел бы убедиться, что это разумно или нет.
Спасибо за чтение этого :)
Шон
Это последний бит, «наконец, информирует каждый элемент его выделенного пространства», то есть важную часть. Менеджер виджета не позволяет самим элементам управления размеру, он просто позволяет им делать подсказки. – moswald
Хмм .. Я получаю, как дети могут быть жадными по размеру, который они распределяют, а затем до родителя вывести нужное количество места. Но вы можете добиться этого в однопроходном алгоритме, выполнив меру() каждого дочернего элемента, а затем окончательный макет() для каждого дочернего элемента, который находится под вызовом layout() родителя. Это все равно будет одной рекурсией дерева, но с двумя проходами для каждого набора детей. Я прав, думая, что это достигает той же цели, что и двухпроходный подход, но он менее эффективен? – Sean
С точки зрения бабушки и дедушки родитель - это еще один ребенок, который он хочет измерить() и layout(). ;) – Bubblewrap