web-dev-qa-db-fra.com

Comment déclencher un événement lorsqu'un clic survient en dehors d'une boîte de dialogue

Je voudrais savoir comment résoudre un problème que j'ai.

J'ai un dialogue qui apparaît dans une activité. Le dialogue ne couvre pas tout l'écran, les boutons de l'activité sont toujours affichés. Je peux facilement fermer la boîte de dialogue quand il y a une touche en dehors de ses limites avec dialog.setCanceledOnTouchOutside(true);

Cependant, ce que je veux faire est de déclencher un événement si un clic est en dehors des limites du dialogue (par exemple si quelqu'un touche un bouton de l'activité principale, il devrait fermer le dialogue et déclencher cet événement en même temps).

31
fizo07

Ça marche pour moi,

        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();

Voir cecihttp://developer.Android.com/reference/Android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL

34
Samir Mangroliya

Lorsque dialog.setCanceledOnTouchOutside(true);, vous remplacez simplement onCancel() comme ceci:

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.
            }
        }
);

Tapez votre code dans la méthode onCancel() pour qu'il s'exécute lorsque la boîte de dialogue est annulée.

49
Will Neithan

Vous pouvez utiliser la solution suivante pour déclencher un événement lorsqu'un clic survient en dehors d'une boîte de dialogue:

dialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        yourFunction();
    }
}
);
0
Mehmed Çavaş