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:
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:
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).
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
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 · Modo claro/escuro · Cores (Cap. 11)