Eu tenho uma atividade que está usando o estilo Theme.Dialog, de modo que seja uma janela flutuante sobre outra atividade. No entanto, quando clico fora da janela de diálogo (na atividade em segundo plano), a caixa de diálogo é fechada. Como posso parar esse comportamento?
229
Respostas:
Isso pode ajudá-lo. É uma maneira de lidar com o toque fora do evento:
Como cancelar um diálogo com o tema Atividade, quando tocado fora da janela?
Ao assistir ao evento e não fazer nada, acho que você pode impedir o fechamento. Mas o que é estranho, porém, é que o comportamento padrão do seu diálogo de atividades não deve ser fechado quando você toca do lado de fora.
(PS: o código usa WindowManager.LayoutParams)
fonte
Para impedir que a caixa de diálogo seja descartada com a tecla Voltar pressionada, use este
E para impedir que a caixa de diálogo seja dispensada com toque externo, use este
fonte
AlertDialog
feche ao ar livre, e é isso que essa resposta fornece.setCancelable(false)
O que você realmente tem é uma Atividade (mesmo que pareça um Diálogo); portanto, você deve ligar
setFinishOnTouchOutside(false)
da sua atividade se quiser mantê-la aberta quando a atividade em segundo plano for clicada.EDIT: funciona apenas com a API do Android nível 11 ou superior
fonte
onBackPressed()
fazendo nada dentro do corpoO que funcionou para mim foi criar
DialogFragment
um conjunto para não ser cancelável:fonte
Ao usar o diálogo como uma atividade no onCreate, adicione este
fonte
Para a API 10 superior, o Diálogo desaparece quando tocado do lado de fora, enquanto que na API 11 inferior, o Diálogo não desaparece. Para evitar isso, você precisa fazer:
Em
styles.xml
:<item name="android:windowCloseOnTouchOutside">false</item>
OU
No
onCreate()
método, use:this.setFinishOnTouchOutside(false);
Nota: para a API 10 e inferior, esse método não tem efeito e não é necessário.
fonte
Definir o cancelamento da caixa de diálogo como falso é suficiente e, se você tocar fora da caixa de diálogo de alerta ou clicar no botão Voltar, a caixa de diálogo de alerta desaparecerá. Então use este:
setCancelable(false)
E a outra função não é mais necessária:
dialog.setCanceledOnTouchOutside(false);
Se você estiver criando uma caixa de diálogo temporária e pensando em colocar essa linha de código, aqui está um exemplo:
fonte
Use este código que está funcionando para mim
fonte
Assista a este link para obter mais detalhes sobre o diálogo.
fonte
Simplesmente,
impedir que o usuário clique fora da caixa de diálogo.
fonte
A caixa de diálogo de alerta foi descontinuada; portanto, use a caixa de diálogo Caixa de diálogo = nova caixa de diálogo (this);
Para evitar fechar com toque externo
fonte
Use
setFinishOnTouchOutside(false)
para API> 11 e não se preocupe, porque o comportamento padrão do seu Android é que a caixa de diálogo com atividades não seja finalizada com o toque externo da API <11 :) !!fonte
Eu uso isso no onCreate (), parece funcionar em qualquer versão do Android; testados no 5.0 e 4.4.x, não é possível testar no pão-de-espécie, os dispositivos Samsung (Nota 1 executando GB) têm o seguinte padrão:
fonte
Acho que isso vai ajudá-lo.
fonte
Aqui está a minha solução:
fonte
Também é possível atribuir diferentes ações implementando onCancelListener:
fonte
Eu estava enfrentando o mesmo problema. Para lidar com isso, defino
OntouchListener
a na caixa de diálogo e não faço nada dentro. Mas o Diálogo também dispensa ao girar a tela. Para corrigi-lo, defino uma variável para me dizer se a caixa de diálogo é normalmente descartada. Em seguida, defino umOnDismissListener
na minha caixa de diálogo e, dentro de mim, verifico a variável. Se a caixa de diálogo normalmente não funciona, eu não faço nada, ou então eu a executo novamente (e definindo o estado dele como ao demitir no meu caso).fonte
builder.setCancelable (false);
public void Mensaje (exibição v) {
fonte
Esta é a resposta perfeita para todas as suas perguntas .... Espero que você goste de codificar no Android
fonte