Empêcher la fermeture du dialogue D'Activité Android sur le toucher extérieur
j'ai une activité qui utilise le Thème.Style de dialogue tel que c'est une fenêtre flottante au-dessus d'une autre activité. Cependant, lorsque je clique à l'extérieur de la fenêtre de dialogue (sur l'activité de fond), le dialogue se ferme. Comment puis-je arrêter ce comportement?
18 réponses
Cela pourrait vous aider. C'est une façon de gérer l'événement touch outside:
en prenant 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é devrait être et non pour se fermer lorsque vous touchez l'extérieur.
(PS: le code utilise WindowManager.LayoutParams)
pour empêcher la boîte de dialogue de se faire rejeter sur la touche de retour pressée utiliser ce
dialog.setCancelable(false);
et pour empêcher la boîte de dialogue de se faire rejeter sur l'extérieur de toucher utiliser ce
dialog.setCanceledOnTouchOutside(false);
ce que vous avez réellement est une activité (même si elle ressemble à un dialogue), par conséquent vous devez appeler setFinishOnTouchOutside(false)
de votre activité si vous voulez la garder ouverte lorsque l'activité de fond est cliquée.
EDIT: cela ne fonctionne qu'avec L'API android de niveau 11 ou plus""
ce qui a fonctionné pour moi était de créer DialogFragment
un ensemble à ne pas être cancelable:
dialog.setCancelable(false);
pour L'API 10 supérieure, la boîte de dialogue disparaît lorsqu'elle est touchée à l'extérieur, alors qu'en dessous de 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 onCreate()
méthode, utiliser: this.setFinishOnTouchOutside(false);
Note: pour L'API 10 et inférieure, cette méthode n'a pas d'effet, et n'est pas nécessaire.
utilisez ce Code ça marche pour moi
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
définir la boîte de dialogue cancelable à false est suffisant, et soit vous touchez en dehors de la boîte de dialogue Alerte ou cliquez sur le bouton Précédent fera disparaître la boîte de dialogue Alerte. Alors utilisez celle-ci:
setCancelable(false)
et l'autre fonction n'est plus nécessaire:
dialog.setCanceledOnTouchOutside(false);
si vous créez un dialogue temporaire et vous demandez là pour 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.
voir ce lien pour plus de détails sur le 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
si vous utilisez dialog comme activité dans l'onCreate, ajouter
setFinishOnTouchOutside(false);
utiliser setFinishOnTouchOutside(false)
pour API > 11 et ne vous inquiétez pas, car le comportement par défaut de son android que le thème de dialogue activity ne sera pas terminé sur outside touch pour API < 11:)!!Cheerss!!
- je l'utiliser dans onCreate(), semble fonctionner sur n'importe quelle version d'Android; testé sur 5.0 et 4.4.x, ne peut pas tester sur pain d'épice, des appareils Samsung (Note 1 GO) de cette manière par défaut:
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.Il a fonctionné pour moi
voici ma solution:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select The Difficulty Level");
builder.setCancelable(false);
je faisais face au même problème. Pour le gérer, j'ai placé un OntouchListener
dans la boîte de dialogue et je ne fais rien à l'intérieur. Mais dialogue rejeter en tournant l'écran aussi. Pour le corriger, j'ai défini une variable pour me dire si la boîte de dialogue A Normalement été rejetée. Puis j'ai mis un OnDismissListener
dans ma boîte de dialogue et à l'intérieur je vérifie la variable. Si la boîte de dialogue a dismmiss normalement Je ne fais rien, ou bien je lance la boîte de dialogue à nouveau (et en définissant son état comme lors du rejet 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();
}
est également possible d'attribuer différentes actions mettant en œuvre onCancelListener:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
C'est la réponse parfaite à toutes vos questions.... J'espère que vous aimez le codage dans Android
new AlertDialog.Builder(this)
.setTitle("Akshat Rastogi Is Great")
.setCancelable(false)
.setMessage("I am the best Android Programmer")
.setPositiveButton("I agree", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();