# Acessibilidade (a11y)

> Alvos de toque generosos, contraste, texto que escala e feedback multissensorial no CrossFly.

Source: https://crossfly.dev/pt/docs/best-practices/acessibilidade — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Acessibilidade (a11y)

Com honestidade sobre o que o framework oferece hoje: foco no que é **acionável** no CrossFly
nativo/OpenGL. Boa parte da a11y aqui **reforça a responsividade** — fonte-relativo é respeito ao
ajuste de tamanho do usuário.

## Alvos de toque generosos
Dimensione áreas tocáveis com `Relative`, nunca pixels minúsculos:
```java
botao.getStyle().autoHeight(Relative.ofFont(2.5f));            // alto o suficiente para o dedo
icone.getStyle().autoWidth(Relative.ofScreen(0.12f, ScreenSize.MIN))
     .autoHeight(Relative.ofScreen(0.12f, ScreenSize.MIN));   // quadrado que adapta
```
Regra prática: alvos de ~48 dp equivalentes — `Relative.ofFont(2.5f)` costuma dar conta.

## Contraste de texto
Garanta contraste adequado; o framework ajuda:
```java
int fundo  = cs.surface.color();
int texto  = ColorUtils.contrastText(fundo);                  // preto/branco conforme o fundo
int melhor = ColorUtils.getContrastColor(fundo, 0xFF000000, 0xFFFFFFFF);  // escolhe entre 2 opções
```
Respeite o tema claro/escuro (via `Styles.setColorScheme`/`setDarkMode`) — não fixe cores que ignoram
o modo (ver [Modo claro/escuro](/docs/ui/theming/dark-mode)).

## Texto que escala
Como as fontes são medidas em unidades relativas, **texto e layout escalam** com o zoom de fonte do
app — consequência direta de usar `Relative.ofFont(...)` e evitar pixels fixos. Deixe o `Label`
quebrar linha; **não trunque** informação essencial.

## Feedback multissensorial e voz
```java
Device.vibrate(50);            // confirmação tátil de uma ação importante
Device.beep();                 // aviso sonoro
Device.textToVoice(mensagem);  // leitura por voz (apoio)
```
Use como **apoio**, não como único canal — combine visual + tátil/sonoro.

## Boas práticas
- Alvos de toque com `Relative.ofFont`/`ofScreen(MIN)`; nada de botões de poucos pixels.
- Contraste via `contrastText`/`getContrastColor`; honre claro/escuro.
- Não trunque texto essencial; deixe escalar/quebrar.

## Erros comuns
- Botões/ícones minúsculos em pixels fixos (difíceis de tocar; não escalam).
- Cores fixas que quebram o contraste no modo escuro.
- Depender só de cor para transmitir estado (adicione ícone/texto).

## Limitações
Recursos de **leitor de tela** dependem da plataforma/launcher — não há uma camada de a11y semântica
universal no core. Priorize os itens acionáveis acima.

## Veja também
- [Responsividade](/docs/best-practices/responsividade) · [Modo claro/escuro](/docs/ui/theming/dark-mode) · Cores (Cap. 11)
