Eu implementei uma caixa de diálogo personalizada para o meu aplicativo. Quero implementar que, quando o usuário clicar fora da caixa de diálogo, a caixa de diálogo será descartada. O que eu tenho que fazer para isso?
fonte
Eu implementei uma caixa de diálogo personalizada para o meu aplicativo. Quero implementar que, quando o usuário clicar fora da caixa de diálogo, a caixa de diálogo será descartada. O que eu tenho que fazer para isso?
Você pode usar o dialog.setCanceledOnTouchOutside(true);
que fechará a caixa de diálogo se tocar fora dela.
Algo como,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Ou, se o seu Diálogo não for modelo,
1 - Defina o sinalizador FLAG_NOT_TOUCH_MODAL
para o atributo da janela da sua caixa de diálogo
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Adicione outro sinalizador às propriedades do Windows ,, FLAG_WATCH_OUTSIDE_TOUCH
- este é para o diálogo receber evento de toque fora de sua região visível.
3 - Substitua a onTouchEvent()
caixa de diálogo e verifique o tipo de ação. se o tipo de ação for ' MotionEvent.ACTION_OUTSIDE
' significa que o usuário está interagindo fora da região da caixa de diálogo. Portanto, nesse caso, você pode alterar o seu diálogo ou decidir o que deseja executar. ver impressão simples?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Para obter mais informações, consulte Como descartar uma caixa de diálogo personalizada com base em pontos de contato? e Como descartar sua caixa de diálogo não modal, quando tocada fora da região da caixa de diálogo
Basta usar
fonte
Você pode usar esta implementação do onTouchEvent. Impede reagir por baixo da atividade ao evento de toque (como mencionado anteriormente).
Fonte: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
fonte
Ou, se você estiver personalizando a caixa de diálogo usando um tema definido em seu estilo xml, coloque esta linha no seu tema:
fonte
dialog.setCanceledOnTouchOutside(true);
funciona maravilhosamente.para fechar o diálogo ao tocar fora.
E se você não quiser fechar o contato do lado de fora, use o código abaixo:
fonte
Esse método deve evitar completamente as atividades abaixo da área cinza de recuperação de eventos de clique.
Remova esta linha, se a tiver:
Coloque isso em sua atividade criada
substitua o evento de toque por este
fonte
Você pode tentar o seguinte: -
ou
E se você tiver um
AlterDialog.Builder
Então você pode tentar o seguinte: -fonte
Esse código é usado para quando o clique é usado na caixa de diálogo que oculta a entrada e quando o usuário clica no lado externo da caixa de diálogo na hora em que a entrada automática e a caixa de diálogo estão fechadas.
fonte
Outra solução, esse código foi retirado do código-fonte android de
Window
Você deve apenas adicionar esses dois métodos ao código-fonte do diálogo.Esta solução não tem este problema:
fonte
Ligue
dialog.setCancelable(false);
da sua atividade / fragmento.fonte
A seguir, trabalhou para mim:
fonte
Você pode
background
ocupar todo o tamanho da telatransparent
e ouvir oonClick
eventodismiss
.fonte
Aqui está o código
Tente este . você pode ocultar o teclado quando tocar fora
fonte