# EvenlySpacedLayout

> Distribui os filhos com espaçamento igual num eixo, preservando o tamanho de cada um.

Source: https://crossfly.dev/pt/docs/ui/layouts/evenly-spaced-layout — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# 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](/docs/ui/layouts/horizontal-layout).

## `add(...)` e construtores
```java
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)
```java
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
```java
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
- [HorizontalLayout](/docs/ui/layouts/horizontal-layout) · [Responsividade](/docs/ui/layouts/responsiveness)
