Pular para o conteúdo principal

Botão flutuante

5 min de leituraAtualizado em 26 out. 2026

Um botão pronto no canto da tela que abre o chat. Ele é opcional: o SDK não desenha nada por cima do seu app sem você pedir. Se preferir um botão seu, chame Atalia.open (Android) ou Atalia.present (iOS) nele.

O botão:

  • entra na tela com o círculo colorido e abre uma pílula com o título ("Fale conosco") e, embaixo, o nome do atendimento;
  • recolhe em círculo depois de 5 segundos;
  • puxado, estica como um elástico e volta ao lugar. Puxado até a borda, se esconde numa aba; tocar ou puxar a aba traz o botão de volta;
  • volta a abrir, com um pulo, quando chega mensagem nova, e mostra o número de não lidas;
  • some enquanto o chat está aberto e entra de novo quando ele fecha;
  • abre o chat já carregado (veja Chat pronto no toque).
Entra aberto e recolhe em círculo.
Puxado, estica e volta. Até a borda, vira uma aba.

A aparência vem do painel​

Cor, texto e lado da tela são os do botão do site, no canal de webchat (Editar canal › Widget › Botão flutuante): Cor do botão, Texto do botão e Posição. O subtítulo é o nome do atendimento, o mesmo do cabeçalho do chat (sem ele, o nome do canal). Mudou no painel, muda no app sem publicar uma versão nova. O app guarda a última aparência, então o botão não pisca nem troca de lado ao abrir. Na primeira abertura do app, o botão espera a aparência do canal para aparecer.

O Estilo do painel (Círculo ou Pill) vale só para o site. No app, o botão sempre abre com o texto e recolhe do jeito da opção collapse.

Mostrar o botão​

Kotlin
Atalia.showLauncher(activity)

Serve para telas com View e com Compose: o botão fica por cima do conteúdo da activity. Chamar de novo só troca as opções. Para tirar: Atalia.hideLauncher(activity).

Para posicionar você mesmo, use a AtaliaLauncherView como qualquer view. No Compose:

Compose
Box(Modifier.fillMaxSize()) {
// ...a sua tela
AndroidView(
factory = { context -> AtaliaLauncherView(context) },
modifier = Modifier.align(Alignment.BottomEnd).padding(16.dp),
)
}

Opções​

Kotlin
Atalia.showLauncher(
activity,
AtaliaLauncherOptions(
bottomMarginDp = 72,
subtitle = "Respondemos em minutos",
collapse = AtaliaLauncherOptions.Collapse.EDGE,
),
)
OpçãoPadrãoPara quê
sideo lado do painelSide.START ou Side.END.
horizontalMarginDp16Distância da lateral, em showLauncher.
bottomMarginDp16Distância do fim da tela, além da barra de navegação, em showLauncher. Aumente para ficar acima de uma barra de abas.
texto do painelTítulo do botão aberto.
subtitleo nome do atendimentoLinha de baixo do botão aberto. "" tira o subtítulo.
colora do painelCor do círculo e da aba (@ColorInt).
collapseCollapse.CIRCLEComo recolhe: CIRCLE (só o círculo), EDGE (aba encostada na lateral) ou NEVER (sempre aberto).
collapseAfterMs5000Tempo aberto antes de recolher.
draggablefalseO usuário arrasta o botão para onde quiser; ao soltar, ele gruda na lateral mais próxima. Só com showLauncher.
dockabletruePuxar até a borda esconde o botão numa aba.
preloadChattrueCarrega o chat escondido enquanto o botão está na tela.
onClickabre o chatTroca a ação do toque.

Chat pronto no toque​

Com o botão na tela, o SDK carrega o chat escondido, um instante depois de o app abrir. O toque abre a folha com o chat pronto, sem esperar a página. Ao fechar, o chat volta a esperar escondido.

O toque abre a folha com o chat já carregado.

Escondido, o chat não conecta, não marca nada como lido e não conta como "no chat": a Atalia continua mandando as notificações push normalmente. Ele só entra no ar quando aparece.

Se o seu app já usa muita memória ou a rede é limitada, desligue com preloadChat = false (Android) ou preloadChat: false (iOS): o chat passa a carregar no toque.

Acessibilidade​

O botão tem o texto do painel como rótulo para o leitor de tela (VoiceOver e TalkBack), que também anuncia as mensagens não lidas. A aba da borda é anunciada como "Mostrar fale conosco". Com a opção de reduzir movimento (iOS) ou de remover animações (Android) ligada no aparelho, o botão troca de forma sem animação.