FAQ — Perguntas Frequentes
Respostas em uma ou duas frases, sempre com link para a fonte. Para aprender, veja
learn/; para corrigir um erro, troubleshooting/.
Geral
O que é o CrossFly? Um framework de UI em Java sobre libGDX/OpenGL — desenha tudo via GPU, sem widgets nativos, então a aparência é idêntica em toda plataforma. (Cap. 1)
Preciso saber libGDX? Não para o dia a dia — você trabalha com Window/Component.
(Cap. 4)
Bootstrap e ciclo de vida
Como o app inicia? O Main instancia a MainWindow por reflexão (via classname).
(Cap. 4)
Minha MainWindow não carrega. Ela precisa estender Window e ter construtor público
sem-args. (Anatomia de projeto)
Onde monto a UI? Em onShow() (com super.onShow()), nunca no construtor.
(Cap. 7)
Threading e renderização
Posso mexer na UI de outra thread? Não — volte com Component.onUI(r) /
Main.runOnPaintThread(r). (A paint thread)
Alterei algo e a tela não atualiza. Render é sob demanda: chame Component.repaint() (e
setValidLayout(false) se mudou tamanho/posição). (Cap. 4 §4.6)
Operação longa sem travar? Rode numa Thread e volte com onUI.
(Trabalho em background)
Layout
O que significam os números do add()? LAY_FILL = -1f preenche a sobra; LAY_AUTO = 0f = tamanho
do conteúdo; >0 = fração do contêiner (não pixels). (Cap. 12)
Padding e margem? ingap (interno) e outgap (externo), no estilo.
(Estilizar componentes)
UI responsiva? Use Relative + LAY_FILL/LAY_AUTO, nunca pixels.
(Responsividade)
GridLayout? Passe todas as larguras, depois todos os componentes: add(w0,w1,…,c0,c1,…).
(GridLayout)
Navegação
Como navego entre telas? novaWindow.show() = push, hide() = pop (é uma pilha de Window).
(Navegação)
Passar dados para outra tela? Pelo construtor da Window de destino — não há rotas nomeadas.
Receber um resultado? picker.show(onAnswer) para pickers; telas comuns usam callback pelo
construtor; Alert responde por buttonAction. (Retornar valores)
Estilo, tema e cores
Trocar claro/escuro? Styles.setDarkMode(true/false) / toggleDarkMode() — re-veste tudo sozinho.
(Modo claro/escuro)
Mudar a “cara” Material/iOS? Skin.set(new MaterialSkin()|new IOSSkin()|new FlutterSkin()).
(Skins)
Definir as cores? Gere um ColorScheme a partir de uma cor-semente.
(Esquemas de cores)
Minha cor ficou invisível. É int ARGB 0xAARRGGBB — sem FF no alpha ela some. Use 0xFF….
(Cap. 11)
Dados e persistência
Salvar preferências simples? Não há mais prefs embutidas (Settings.appSettings foi removido) —
use SQLite ou arquivos em Device.homeFolder. (Arquivos e preferências)
Usar banco? dev.crossfly.sqlite (SqliteDb/SqliteStmt/SqliteCursor), com cifra SQLite3MC, fora
da paint thread. (Persistência com SQLite)
Tem cliente HTTP/sync pronto? Não — use java.net/OkHttp; JSON com Jackson.
(Rede e HTTP)
i18n de textos? O framework não traduz — só formata datas/números por locale (LocaleFormats);
a tradução é sua. (Internacionalização)
Lista grande lenta? Use VirtualListView/PagedDataAdapter.
(Performance e listas grandes)
Plataformas e dispositivo
Em quais plataformas roda? Android, iOS, Desktop (Windows/macOS/Linux via LWJGL3) e Web (TeaVM). (Matriz de plataformas)
Câmera/GPS/Bluetooth/biometria? Pacote dev.crossfly.device; Bluetooth é BLE/GATT assíncrono.
(Cap. 24)
Impressora térmica? Suporte removido — fale direto via BLE/GATT. (Bluetooth BLE)
UI engasga em device antigo? Cheque Screen.slowGPU e reduza sombras/gradientes/glass.
(Cap. 8)
Testar a UI automaticamente? Framework dev.crossfly.test (TestCase + comparação de screenshot).
(Testes)
O Javadoc contradiz o comportamento? Confie no código e nesta doc. (Como a referência é organizada)
Veja também
- Fonte canônica: Capítulo 34 — FAQ ·
troubleshooting/·reference/