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

EvenlySpacedLayout

Distribui os filhos com espaçamento igual em um eixo (horizontal por padrão), preservando o tamanho de cada um. Ideal para toolbars de ícones/botões de tamanho próprio.

🟡 · Pacote: dev.crossfly.ui.layout · Estende: Layout

Quando usar

  • Barras de ações / toolbars de ícones que devem ficar igualmente espaçados.

Quando NÃO usar

  • Quando os itens devem esticar para preencher → use frações no HorizontalLayout.

add(...) e construtores

public EvenlySpacedLayout add(Component c);      // (ou add(Component...))
new EvenlySpacedLayout();                          // HORIZONTAL (default)
new EvenlySpacedLayout(Orientation.VERTICAL);      // eixo vertical

⚠️ Ponto-chave: ele NÃO dimensiona os itens

O layout só distribui os espaços — o tamanho de cada item vem dos bounds atuais ou do auto-size. Para itens responsivos, dê a eles um tamanho pelo estilo (autoWidth/autoHeight) com Relative.

Exemplo completo (copiar, colar e rodar)

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.graphics.*;

/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();

      String[] icones = { "home", "search", "settings", "person" };

      Component toolbar = new Component();
      toolbar.setLayout(new EvenlySpacedLayout());                 // horizontal
      Relative lado = Relative.ofScreen(0.12f, ScreenSize.MIN);    // 12% do menor lado → quadrado responsivo
      for (String glyph : icones) {
         Button b = new Button(new MaterialIcon(glyph));
         b.getStyle().autoWidth(lado).autoHeight(lado);            // tamanho responsivo pelo estilo
         toolbar.add(b);
      }

      setLayout(new VerticalLayout(Position.START, Position.START));
      add(LAY_FILL, new Component());   // conteúdo (placeholder)
      add(LAY_AUTO, toolbar);           // barra de ações no rodapé
   }
}

Os trechos abaixo mostram só o miolo (o que vai dentro de onShow()). Para rodar, coloque-os no esqueleto MainWindow acima.

Uso básico

Component toolbar = new Component();
toolbar.setLayout(new EvenlySpacedLayout());                 // horizontal
Relative lado = Relative.ofScreen(0.12f, ScreenSize.MIN);    // 12% do menor lado → quadrado responsivo
for (String glyph : icones) {
   Button b = new Button(new MaterialIcon(glyph));
   b.getStyle().autoWidth(lado).autoHeight(lado);            // tamanho responsivo pelo estilo
   toolbar.add(b);
}

Como arranja

│   [i1]     [i2]     [i3]   │   ← espaços iguais entre e nas bordas; itens mantêm seu tamanho

Boas práticas

  • Dê o tamanho dos itens por Relative (ofScreen(..., ScreenSize.MIN) para quadrados que adaptam a portrait/landscape).

Erros comuns

  • Esperar que os itens fiquem do mesmo tamanho automaticamente — não ficam; defina o tamanho.
  • Usar pixels fixos para o tamanho dos itens.

Veja também

Esta página foi útil?