Une activité utilisant le style Theme.Dialog est une fenêtre flottante par rapport à une autre activité. Cependant, lorsque je clique en dehors de la fenêtre de dialogue (sur l'activité en arrière-plan), la boîte de dialogue se ferme. Comment puis-je arrêter ce comportement?
Cela pourrait vous aider. C'est un moyen de gérer l'événement tactile extérieur:
En attrapant 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 dialogue d’activité doit être et non de se fermer lorsque vous touchez à l’extérieur.
(PS: le code utilise WindowManager.LayoutParams)
Pour éviter que la boîte de dialogue ne soit rejetée lorsque vous appuyez sur la touche Retour, utilisez cette commande.
dialog.setCancelable(false);
Et pour éviter que la boîte de dialogue ne soit rejetée par une touche extérieure, utilisez cette option.
dialog.setCanceledOnTouchOutside(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)
de votre activité si vous souhaitez la garder ouverte lorsque vous cliquez sur l'activité en arrière-plan.
ÉDITER: cela ne fonctionne qu'avec Android API de niveau 11 ou supérieur.
Ce qui a fonctionné pour moi a été de créer DialogFragment
et de ne pas pouvoir l’annuler:
dialog.setCancelable(false);
Pour l'API 10 supérieure, le dialogue disparaît lorsqu'il est touché à l'extérieur, alors que dans l'API 11 inférieure, le dialogue ne disparaît pas. Pour éviter cela, vous devez faire:
Dans styles.xml
: <item name="Android:windowCloseOnTouchOutside">false</item>
OR
Dans la méthode onCreate()
, utilisez: this.setFinishOnTouchOutside(false);
Remarque: pour les API 10 et inférieures, cette méthode est sans effet et n'est pas nécessaire.
Lors de l’utilisation de dialog comme activité dans onCreate, ajoutez ceci
setFinishOnTouchOutside(false);
tilisez ce code ça marche pour moi
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
Il suffit de définir la boîte de dialogue annulable sur false. Si vous appuyez en dehors de la boîte de dialogue d'alerte ou cliquez sur le bouton Précédent, la boîte de dialogue d'alerte disparaîtra. 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 vous y demandez de mettre cette ligne de code, voici un exemple:
new AlertDialog.Builder(this)
.setTitle("Trial Version")
.setCancelable(false)
.setMessage("You are using trial version!")
.setIcon(R.drawable.time_left)
.setPositiveButton(Android.R.string.yes, null).show();
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
//use this to dismiss the dialog on outside click of dialog
dialog.setCanceledOnTouchOutside(false);
//use this for not to dismiss the dialog on outside click of dialog.
Regardez ce lien pour plus de détails sur dialogue.
dialog.setCancelable(false);
//used to prevent the dismiss of dialog on backpress of that activity
dialog.setCancelable(true);
//used to dismiss the dialog on onbackpressed of that activity
Simplement,
alertDialog.setCancelable(false);
empêcher l'utilisateur de cliquer en dehors de la boîte de dialogue.
Utilisez setFinishOnTouchOutside(false)
pour l'API> 11 et ne vous inquiétez pas car son comportement par défaut pour Android, cette boîte de dialogue sur le thème de l'activité ne sera pas terminée pour API <11 :) !!
J'utilise ceci dans onCreate (), semble fonctionner sur n'importe quelle version d'Android; testé sur les versions 5.0 et 4.4.x, ne peut pas être testé sur Gingerbread, les appareils Samsung (remarque 1 Go en cours d'exécution) l'ont par défaut comme suit:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
setFinishOnTouchOutside(false);
}
else
{
getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
}
super.onCreate(savedInstanceState);
alert.setCancelable(false);
alert.setCanceledOnTouchOutside(false);
Je suppose que cela vous aidera. Cela a fonctionné pour moi
Voici ma solution:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select The Difficulty Level");
builder.setCancelable(false);
Il est également possible d’affecter différentes actions mettant en œuvre onCancelListener:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
Je faisais face au même problème. Pour le gérer, je mets un OntouchListener
dans le dialogue et je ne fais rien à l'intérieur. Mais Dialog rejeter lors de la rotation de l'écran aussi. Pour résoudre ce problème, je mets une variable pour me dire si le dialogue a été normalement fermé. Ensuite, je mets un OnDismissListener
dans ma boîte de dialogue et à l'intérieur, je vérifie la variable. Si la boîte de dialogue a perdu son respect, normalement je ne fais rien, sinon je l'exécute à nouveau (et il définit son état de la même manière que s'il la rejette dans mon cas).
builder.setCancelable (false);
public void Mensaje (View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("¿Quieres ir a el Menú principal?");
builder.setMessage("Al presionar SI iras a el menú y saldras de la materia.");
builder.setPositiveButton("SI", null);
builder.setNegativeButton("NO", null);
builder.setCancelable(false);
builder.show();
}