防止 Android 活动对话框在外部触摸时关闭

问题描述 投票:0回答:20

我有一个使用 Theme.Dialog 样式的活动,它是另一个活动上方的浮动窗口。但是,当我在对话框窗口外部(在后台活动上)单击时,对话框将关闭。我怎样才能阻止这种行为?

java android android-activity dialog touch
20个回答
559
投票

要防止按下后退键时对话框消失,请使用此

dialog.setCancelable(false);

为了防止对话框在外部触摸时被关闭,请使用此

 dialog.setCanceledOnTouchOutside(false);

133
投票

您实际上拥有的是一个 Activity(即使它看起来像一个对话框),因此如果您想在单击后台 Activity 时保持其打开状态,则应该从您的 Activity 中调用

setFinishOnTouchOutside(false)

编辑:这只适用于 Android API 级别 11 或更高版本


89
投票

对我有用的是创建

DialogFragment
并将其设置为不可取消:

dialog.setCancelable(false);

34
投票

这可以帮助你。这是一种处理外部触摸事件的方法:

如何在窗口外触摸时取消 Activity 等主题的 Dialog?

通过抓住事件而不采取任何行动,我认为您可以防止关闭。但奇怪的是,当您触摸外部时,活动对话框的默认行为应该是“不”自行关闭。 (PS:代码中使用了WindowManager.LayoutParams)


22
投票

setFinishOnTouchOutside(false);



20
投票

styles.xml

中:

<item name="android:windowCloseOnTouchOutside">false</item>

onCreate()

方法中,使用:

this.setFinishOnTouchOutside(false);

注意:对于 API 10 及更低版本,此方法无效,不需要。


18
投票

setCancelable(false)


另外一个函数就不再需要了:

dialog.setCanceledOnTouchOutside(false);


如果您正在创建一个临时对话框并想在那里放置这行代码,这里有一个示例:

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();



16
投票

防止外界接触靠近

dialog.setCanceledOnTouchOutside(false);



15
投票
使用此代码,它对我有用

AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setCancelable(false);

    


14
投票
观看此链接,了解有关 
dialog 的更多详细信息。

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



11
投票

alertDialog.setCancelable(false);

防止用户在对话框之外单击。


6
投票

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setFinishOnTouchOutside(false); } else { getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); } super.onCreate(savedInstanceState);



5
投票
setFinishOnTouchOutside(false)

,不用担心,因为 Android 的默认行为是活动主题对话框不会在 API 的外部触摸上完成

    
< 11 :) !!Cheerss!!


5
投票
我想这会对你有帮助。它对我有用


3
投票

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select The Difficulty Level"); builder.setCancelable(false);



2
投票

alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } });



2
投票
dismissOnClickOutside = false

属性来防止关闭。

    AlertDialog(
        title = {
            Text("Title")
        },
        text = {
            Text(text = name)
        },
        onDismissRequest = onDismiss,
        confirmButton = {
            TextButton(onClick = onDismiss ) {
                Text("Yes")
            }
        },
        dismissButton = {
            TextButton(onClick = onDismiss ) {
                Text("Cancel")
            }
        },
        properties = DialogProperties(
            dismissOnClickOutside = false
        )
    )

}


1
投票
OntouchListener

,并且在里面什么都不做。但旋转屏幕时对话框也会关闭。为了解决这个问题,我设置了一个变量来告诉我对话框是否已正常关闭。然后我在对话框中设置了一个

OnDismissListener
,并在里面检查变量。如果对话框正常关闭,我什么也不做,否则我会再次运行对话框(并将其状态设置为在我的情况下关闭时的状态)。
    


1
投票
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(); }


-2
投票

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();

© www.soinside.com 2019 - 2024. All rights reserved.