# HorizontalLayout

> Dispõe os filhos lado a lado, cada um na altura do contêiner.

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

# HorizontalLayout

Dispõe os componentes-filhos **lado a lado** (uma coluna por filho), da esquerda para a direita. É o
par horizontal do [VerticalLayout](/docs/ui/layouts/vertical-layout) — ideal para barras e linhas de controles.

> 🟢 · **Pacote:** `dev.crossfly.ui.layout` · **Estende:** `Layout`

## Quando usar
- Barras de busca/ação: `[ícone] [campo que estica] [botão]`.
- Qualquer linha de controles.

## Quando NÃO usar
- Empilhar verticalmente → [VerticalLayout](/docs/ui/layouts/vertical-layout).
- Precisa de várias colunas com proporção por linha → [GridLayout](/docs/ui/layouts/grid-layout).

## `add(...)` — assinatura e semântica
```java
public HorizontalLayout add(float largura, Component c)
```
| Valor | Significado |
|---|---|
| `LAY_AUTO` (`0f`) | **largura natural** do componente |
| `LAY_FILL` (`-1f`) | **preenche a sobra** (use **uma** coluna FILL) |
| `> 0` (ex. `0.5f`) | **fração da largura do contêiner** |

## Construtores
| Construtor | Descrição |
|---|---|
| `new HorizontalLayout()` | itens **centralizados verticalmente** |
| `new HorizontalLayout(Position h, Position v)` | `v` = alinhamento vertical de cada coluna |

## Exemplo completo (copiar, colar e rodar)
```java
package com.exemplo;

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

/** 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();

      setLayout(new VerticalLayout(Position.START, Position.START));

      Component barra = new Component();
      barra.setLayout(new HorizontalLayout(Position.START, Position.CENTER));
      barra.add(LAY_AUTO, new Label("🔎"));               // largura natural
      barra.add(LAY_FILL, new TextField("Buscar..."));     // estica
      barra.add(LAY_AUTO, new Button("OK"));               // largura natural

      add(LAY_AUTO, barra);                    // a barra ocupa uma linha do topo
      add(LAY_FILL, new Component());          // resto da tela (placeholder)
   }
}
```

> 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 barra = new Component();
barra.setLayout(new HorizontalLayout(Position.START, Position.CENTER));
barra.add(LAY_AUTO, new ImageView(/* ícone */));   // largura natural
barra.add(LAY_FILL, new TextField("Buscar..."));    // estica
barra.add(LAY_AUTO, new Button("OK"));              // largura natural
```

## Como arranja
```
┌────────┬───────────────────────────┬────────┐
│ ícone  │ campo (LAY_FILL, estica)   │ botão  │
│ (auto) │                           │ (auto) │
└────────┴───────────────────────────┴────────┘
```

## Boas práticas
- **1 elemento `LAY_FILL`** por linha (o que deve esticar).
- Dois "elásticos" com proporção fixa → frações (`0.5f`/`0.5f`) ou [GridLayout](/docs/ui/layouts/grid-layout).

## Erros comuns
- Dois `LAY_FILL` na mesma linha.
- Usar pixels (`add(120, x)`) em vez de fração/auto — quebra a responsividade.

## Veja também
- [VerticalLayout](/docs/ui/layouts/vertical-layout) · [GridLayout](/docs/ui/layouts/grid-layout) · [Responsividade](/docs/ui/layouts/responsiveness)
