/ / Layout da interface do usuário com duas passagens: por quê? - android, wpf, silverlight, interface de usuário, layout

Layout de interface do usuário de duas passagens: por quê? - android, wpf, silverlight, interface do usuário, layout

Eu notei que Android, WPF e Silverlighttodos seguem um padrão de layout de duas passagens. Existe um método Measure () recursivo que é chamado para dimensionar o elemento, possivelmente várias vezes. Em seguida, um método Layout / Arrange () recursivo é chamado, que estabelece as posições exatas dos filhos em seu controle pai e também define a final tamanho do controle.

Minha pergunta: por que isso é dividido em duas passagens, especialmente quando, para alguns tipos de controles, o Measure () não pode calcular o tamanho real de um controle sem realmente definir as posições dos filhos? Existe algum tipo de minoria de layout que é tornado possível por isso?

Estou tentando criar meu próprio kit de ferramentas de interface do usuário e atualmente estou inclinado a um padrão Layout () de uma passagem, mas gostaria de estar convencido de que isso é sábio ou não.

Obrigado por ler isto :)

Sean

Respostas:

11 para resposta № 1

A razão para as duas passagens é que qualquer elemento na estrutura pode influenciar o espaço disponível restante dos outros.

Algum elemento deseja levar o maior possívelespaço, enquanto outros têm dimensões fixas. Você também pode ter elementos com apenas um conjunto de largura máxima. Ele cria uma equação que não pode ser resolvida em uma única passagem.

Os diferentes painéis da hierarquia solicitam aoelementos de que tamanho eles precisam na primeira passagem, depois distribua o espaço entre eles de acordo com a natureza de cada painel e, finalmente, informe cada elemento de seu espaço alocado.

EDIT: Mais algumas explicações

A principal desvantagem de um layout de passe único é quevocê está manipulando cada elemento sequencialmente. Um primeiro elemento ocupa uma certa quantidade de espaço e os outros, o restante. Por que esse elemento é o primeiro? Experimente seu algoritmo com ordem de elementos diferentes e você terá diferentes layouts resultantes.

Um layout de duas passagens simula um comportamento paralelo em que cada elemento influencia todo o layout.