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