I have an activity that is using the Theme.Dialog style such that it is a floating window over another activity. However, when I click outside the dialog window (on the background activity), the dialog closes. How can I stop this behaviour?
问题:
回答1:
This could help you. It is a way to handle the touch outside event:
How to cancel an Dialog themed like Activity when touched outside the window?
By catching the event and doing nothing, I think you can prevent the closing. But what is strange though, is that the default behavior of your activity dialog should be not to close itself when you touch outside.
(PS: the code uses WindowManager.LayoutParams)
回答2:
To prevent dialog box from getting dismissed on back key pressed use this
dialog.setCancelable(false);
And to prevent dialog box from getting dismissed on outside touch use this
dialog.setCanceledOnTouchOutside(false);
回答3:
What you actually have is an Activity (even if it looks like a Dialog), therefore you should call setFinishOnTouchOutside(false)
from your activity if you want to keep it open when the background activity is clicked.
EDIT: This only works with android API level 11 or greater
回答4:
What worked for me was to create dialogFragment an set it to not be cancelable:
dialog.setCancelable(false);
回答5:
For higher API 10, the Dialog disappears when on touched outside, whereas in lower than API 11, the Dialog doesn't disappear. For prevent this, you need to do:
In styles.xml
:
OR
In onCreate()
method, use: this.setFinishOnTouchOutside(false);
Note: for API 10 and lower, this method doesn't have effect, and is not needed.
回答6:
Use This Code it's Working For me
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setCancelable(false);
回答7:
Setting the dialog cancelable to be false is enough, and either you touch outside of the alert dialog or click the back button will make the alert dialog disappear. So use this one:
setCancelable(false)
And the other function is not necessary anymore: dialog.setCanceledOnTouchOutside(false);
If you are creating a temporary dialog and wondering there to put this line of code, here is an example:
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();
回答8:
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.
Watch this link for more details about dialog.
dialog.setCancelable(false);//used to prevent the dismiss of dialog on backpress of that activity dialog.setCancelable(true);//used to dismiss teh dialog on onbackpressed of that activity
回答9:
When using dialog as an activity in the onCreate add this
setFinishOnTouchOutside(false);
回答10:
Simply,
alertDialog.setCancelable(false);
prevent user from click outside of Dialog Box.
回答11:
I use this in onCreate(), seems to work on any version of Android; tested on 5.0 and 4.4.x, can't test on Gingerbread, Samsung devices (Note 1 running GB) have it this way by default:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setFinishOnTouchOutside(false); } else { getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); } super.onCreate(savedInstanceState);
回答12:
Use setFinishOnTouchOutside(false)
for API > 11 and don't worry because its android's default behavior that activity themed dialog won't get finished on outside touch for API
回答13:
alert.setCancelable(false); alert.setCanceledOnTouchOutside(false);
I guess this will help you.It Worked For me
回答14:
Here is my solution:
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select The Difficulty Level"); builder.setCancelable(false);
回答15:
I was facing the same problem. To handle it I set a OntouchListener
to the dialog and do nothing inside. But Dialog dismiss when rotating screen too. To fix it I set a variable to tell me if the dialog has normally dismissed. Then I set a OnDismissListener
to my dialog and inside I check the variable. If the dialog has dismmiss normally I do nothin, or else I run the dialog again (and setting his state as when dismissing in my case).
回答16:
builder.setCancelable(false);
public void Mensaje(View v){
回答17:
Also is possible to assign different action implementing onCancelListener:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } });