J'ai une activité qui utilise le style Theme.Dialog de telle sorte que c'est une fenêtre flottante sur une autre activité. Cependant, lorsque je clique en dehors de la fenêtre de dialogue (sur l'activité d'arrière-plan), la boîte de dialogue se ferme. Comment puis-je arrêter ce comportement?
229
Réponses:
Cela pourrait vous aider. C'est un moyen de gérer l'événement tactile extérieur:
Comment annuler une activité sur le thème du dialogue comme lorsque vous touchez à l'extérieur de la fenêtre?
En saisissant l'événement et en ne faisant rien, je pense que vous pouvez empêcher la fermeture. Mais ce qui est étrange, c'est que le comportement par défaut de votre boîte de dialogue d'activité ne doit pas se fermer lorsque vous touchez l'extérieur.
(PS: le code utilise WindowManager.LayoutParams)
la source
Pour éviter que la boîte de dialogue ne soit fermée lorsque vous appuyez sur la touche Retour, utilisez cette
Et pour éviter que la boîte de dialogue ne soit fermée sur une touche extérieure, utilisez cette
la source
AlertDialog
de se fermer au toucher à l'extérieur, et c'est ce que cette réponse fournit.setCancelable(false)
Ce que vous avez réellement est une activité (même si elle ressemble à une boîte de dialogue), vous devez donc appeler
setFinishOnTouchOutside(false)
depuis votre activité si vous souhaitez la garder ouverte lorsque vous cliquez sur l'activité en arrière-plan.EDIT: Cela ne fonctionne qu'avec l'API Android de niveau 11 ou supérieur
la source
onBackPressed()
ne rien faire dans son corpsCe qui a fonctionné pour moi, c'est de créer
DialogFragment
un ensemble pour qu'il ne soit pas annulable:la source
Lors de l'utilisation de la boîte de dialogue en tant qu'activité dans onCreate, ajoutez ceci
la source
Pour l'API 10 supérieure, la boîte de dialogue disparaît lorsqu'elle est touchée à l'extérieur, tandis que dans une version inférieure à l'API 11, la boîte de dialogue ne disparaît pas. Pour éviter cela, vous devez faire:
Dans
styles.xml
:<item name="android:windowCloseOnTouchOutside">false</item>
OU
Dans la
onCreate()
méthode, utilisez:this.setFinishOnTouchOutside(false);
Remarque: pour l'API 10 et les versions antérieures, cette méthode n'a aucun effet et n'est pas nécessaire.
la source
La définition de la boîte de dialogue annulable sur false est suffisante, et soit vous touchez en dehors de la boîte de dialogue d'alerte, soit vous cliquez sur le bouton Précédent pour faire disparaître la boîte de dialogue d'alerte. Alors utilisez celui-ci:
setCancelable(false)
Et l'autre fonction n'est plus nécessaire:
dialog.setCanceledOnTouchOutside(false);
Si vous créez une boîte de dialogue temporaire et que vous vous demandez où mettre cette ligne de code, voici un exemple:
la source
Utilisez ce code, ça marche pour moi
la source
Regardez ce lien pour plus de détails sur la boîte de dialogue.
la source
Simplement,
empêcher l'utilisateur de cliquer en dehors de la boîte de dialogue.
la source
La boîte de dialogue d'alerte est obsolète, utilisez donc Dialogue dialog = new Dialog (this);
Pour empêcher le contact avec l'extérieur
la source
Utilisez
setFinishOnTouchOutside(false)
pour API> 11 et ne vous inquiétez pas, car le comportement par défaut de son androïde que la boîte de dialogue sur le thème de l'activité ne sera pas terminé sur une touche extérieure pour API <11 :) !!la source
J'utilise ceci dans onCreate (), semble fonctionner sur n'importe quelle version d'Android; testé sur 5.0 et 4.4.x, ne peut pas tester sur Gingerbread, les appareils Samsung (Note 1 exécutant Go) l'ont de cette façon par défaut:
la source
Je suppose que cela vous aidera.
la source
Voici ma solution:
la source
Il est également possible d'affecter différentes actions implémentant onCancelListener:
la source
J'étais confronté au même problème. Pour le gérer, j'ai mis un
OntouchListener
dans la boîte de dialogue et je ne fais rien à l'intérieur. Mais la boîte de dialogue disparaît également lors de la rotation de l'écran. Pour le corriger, j'ai défini une variable pour me dire si la boîte de dialogue s'est normalement fermée. Ensuite, je mets unOnDismissListener
à ma boîte de dialogue et à l'intérieur je vérifie la variable. Si la boîte de dialogue n'a pas disparu normalement, je ne fais rien, ou bien je lance à nouveau la boîte de dialogue (et en définissant son état comme lors du rejet dans mon cas).la source
builder.setCancelable (false);
public nul Mensaje (vue v) {
la source
Ceci est la réponse parfaite à toutes vos questions .... J'espère que vous apprécierez le codage dans Android
la source