J'ai implémenté une boîte de dialogue personnalisée pour mon application. Je veux implémenter que lorsque l'utilisateur clique en dehors de la boîte de dialogue, la boîte de dialogue sera fermée. Que dois-je faire pour cela?
la source
J'ai implémenté une boîte de dialogue personnalisée pour mon application. Je veux implémenter que lorsque l'utilisateur clique en dehors de la boîte de dialogue, la boîte de dialogue sera fermée. Que dois-je faire pour cela?
Vous pouvez utiliser dialog.setCanceledOnTouchOutside(true);
ce qui fermera la boîte de dialogue si vous touchez en dehors de la boîte de dialogue.
Quelque chose comme,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Ou si votre boîte de dialogue n'est pas un modèle alors,
1 - Définissez le drapeau- FLAG_NOT_TOUCH_MODAL
pour l'attribut de fenêtre de votre boîte de dialogue
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Ajoutez un autre drapeau aux propriétés de Windows ,, FLAG_WATCH_OUTSIDE_TOUCH
- celui-ci est pour que le dialogue reçoive un événement tactile en dehors de sa région visible.
3 - Remplacer la onTouchEvent()
boîte de dialogue et vérifier le type d'action. si le type d'action est « MotionEvent.ACTION_OUTSIDE
» signifie que l'utilisateur interagit en dehors de la zone de dialogue. Donc, dans ce cas, vous pouvez fermer votre boîte de dialogue ou décider de ce que vous souhaitez effectuer. voir le papier ordinaire?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Pour plus d'informations, consultez Comment fermer une boîte de dialogue personnalisée basée sur les points de contact? et Comment fermer votre boîte de dialogue non modale, lorsqu'elle est touchée en dehors de la zone de dialogue
Utilisez simplement
la source
Vous pouvez utiliser cette implémentation de onTouchEvent. Il empêche de réagir sous l'activité à l'événement tactile (comme mentionné howettl).
Source: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
la source
Ou, si vous personnalisez la boîte de dialogue à l'aide d'un thème défini dans votre style xml, mettez cette ligne dans votre thème:
la source
dialog.setCanceledOnTouchOutside(true);
fonctionne à merveille.pour fermer le dialogue au toucher à l'extérieur.
Et si vous ne voulez pas fermer au toucher à l'extérieur, utilisez le code ci-dessous:
la source
Cette méthode doit complètement éviter les activités sous la zone grise de récupération des événements de clic.
Supprimez cette ligne si vous l'avez:
Mettez ceci sur votre activité créée
puis écraser l'événement tactile avec ce
la source
Vous pouvez essayer ceci: -
ou
Et si vous avez un
AlterDialog.Builder
alors vous pouvez essayer ceci: -la source
Ce code est utilisé lors de l'utilisation, cliquez sur la boîte de dialogue pour masquer l'entrée logicielle et lorsque l'utilisateur clique sur le côté extérieur de la boîte de dialogue, lorsque l'entrée logicielle et la boîte de dialogue sont fermées.
la source
Une autre solution, ce code a été tiré du code source Android de
Window
Vous devez simplement ajouter ces deux méthodes au code source de votre boîte de dialogue.Cette solution n'a pas ce problème:
la source
Appelez
dialog.setCancelable(false);
depuis votre activité / fragment.la source
La suite a fonctionné pour moi:
la source
Vous pouvez faire un
background
occupant toute la taille de l'écrantransparent
et écouter l'onClick
événementdismiss
.la source
Voici le code
Essaye celui-là . vous pouvez masquer le clavier lorsque vous touchez l'extérieur
la source