Pergunta

Eu gostaria de saber como resolver um problema que eu tenho.

Eu tenho uma caixa de Diálogo que aparece em uma atividade.O Diálogo não tampa toda a tela, de modo que os botões da atividade ainda mostrar.Eu posso facilmente fechar a caixa de diálogo quando há um toque fora da caixa de diálogo limites com dialog.setCanceledOnTouchOutside(true);

No entanto o que eu quero fazer é disparar um evento se um clique fora da caixa de Diálogo limites e.g se alguém toca um botão na barra principal Atividade, ele deve fechar a caixa de Diálogo e fogo que o evento ao mesmo tempo).

Foi útil?

Solução

Ele Trabalha Para mim,,

        Window window = dialog.getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

        dialog.show();

Veja isso http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL

Outras dicas

Quando dialog.setCanceledOnTouchOutside(true); depois é só substituir onCancel() como esta:

dialog.setOnCancelListener(
        new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                //When you touch outside of dialog bounds, 
                //the dialog gets canceled and this method executes.
            }
        }
);

Digite o seu código dentro do onCancel() método assim que funciona quando a caixa de diálogo fica cancelada.

Se você estiver dentro de diálogo personalizada de classe, e gostaria de pegar um clique fora do evento - substituir cancelar().Se você quiser pegar 'diálogo fechado" evento - substituir exonerar().Eu recomendo a inserção de lógica ANTES da super.fechar().Kotlin exemplo:

override fun dismiss() {
    Utils.hideKeyboard(mContext, window)
    super.dismiss()
}

Você pode usar um OnCancelListener para disparar um evento quando um clique ocorre fora de uma caixa de diálogo:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        yourFunction();
    }
});

No DialogFragment você pode usar AlertDialog e a resposta de @silverTech:

override fun onDismiss(dialog: DialogInterface) {
    yourMethod()
    super.onDismiss(dialog)
}

ou

override fun onCancel(dialog: DialogInterface) {
    super.onCancel(dialog)
    yourMethod()
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top