Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

Layout e o modelo Relative

O CrossFly é relativo por padrão, não absoluto. Entender isso explica por que suas telas se adaptam sozinhas a tamanhos, densidades e rotações diferentes.

O contrato de layout

Cada container delega a organização dos filhos a um Layout. O ciclo, em cascata, é sempre:

medir → posicionar → propagar onLayout para os filhos.

Quando o layout é invalidado (mudou o tamanho, o conteúdo, a rotação), o framework refaz esse ciclo a partir da raiz. Você não recalcula posições na mão — declara a intenção e o Layout resolve.

O espectro de layouts (por intenção)

  • Empilhar (vertical/horizontal) → VerticalLayout / HorizontalLayout
  • Grade por fração → GridLayout
  • Ancorar um componente a outro → RelativeLayout
  • Espaçar uniformemente → EvenlySpacedLayout
  • Posição livre → RandomLayout

Trocar o Layout de um container muda o arranjo sem mexer nos filhos — é isso que torna a resposta à rotação trivial. (How-to em Layouts.)

O coração conceitual: Relative

Tamanhos e posições não são pixels fixos — são relações. As quatro formas:

Forma Significado Escala com
Relative.ofFont(1.5f) fração da altura da fonte o zoom/densidade da UI
Relative.ofScreen(0.8f[, ScreenSize]) fração da tela o tamanho da tela / orientação
LAY_FILL / LAY_AUTO / fração fração do container o tamanho do pai
Relative.ofPixels(24f) pixel absoluto nada (use por exceção)

E o Gap (padding ingap / margem outgap) segue a mesma lógica: Gap.ofFont(...) escala junto.

// header (altura de conteúdo), conteúdo (absorve a sobra), footer (conteúdo) — em VerticalLayout:
tela.add(LAY_AUTO, header);
tela.add(LAY_FILL, conteudo);   // o "elástico"
tela.add(LAY_AUTO, footer);

Por que isso é a base da responsividade

Se não há pixels fixos espalhados, o framework pode recalcular tudo a cada resize, rotação ou mudança de escala — e a tela simplesmente se readapta. A responsividade não é um recurso à parte: é consequência de medir por relações.

Regra de ouro: escreva tamanhos como Relative/frações/LAY_FILL; reserve ofPixels para casos genuinamente fixos. Um pixel fixo é uma aposta de que a tela nunca muda — e ela sempre muda.

Veja também

Esta página foi útil?