我用
extends DialogFragment
我想要除了对话框之外,禁用android上的点击。
我尝试了
setCanceledOnTouchOutside(true)
,但它不起作用。
请检查我的来源。
public class QuestDialog extends DialogFragment {
private String mainMessage = "";
private View.OnClickListener positiveListener = null;
private View.OnClickListener negativeListener = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_dialog, container, false);
TextView textView = (TextView) view.findViewById(R.id.main_msg);
textView.setText(mainMessage);
Button positiveBtn = (Button) view.findViewById(R.id.dialog_positive_btn);
Button negativeBtn = (Button) view.findViewById(R.id.dialog_negative_btn);
positiveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (positiveListener != null) {
positiveListener.onClick(view);
}
}
});
negativeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (negativeListener != null) [
negativeListener.onClick(view);
}
}
});
return view;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCanceledOnTouchOutside(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
return dialog;
}
public void setMessage(final String msg) {
mainMessage = new String(msg);
}
public void setPositiveButton(View.OnClickListener listener) {
positiveListener = listener;
}
这个。
如何禁用android上dialogfragment外部的点击?
谢谢。
根据您的要求,您应该使用
setCancelable(true)
。
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
科特林 覆盖 DialogFragment 中的 onCreateDialog
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)
dialog.setCancelable(false)
dialog.setCanceledOnTouchOutside(false)
return dialog
}
在显示之前在 DialogFragment 中设置 .setCancelable(false) 。
QuestDialog questDialog = new QuestDialog();
questDialog.setCancelable(false);
questDialog.show(getSupportFragmentManager(),"Tag");
onCreateView 中的普通 setCancelable(false) (没有对话框。)对我有用
请使用
dialog.setCancelable(boolean)
方法。
谢谢
在 Kotlin 中你可以通过以下代码实现你的目标
val showDialog = SelectFlatDailog()
showDialog.isCancelable = false
showDialog.show(supportFragmentManager, showFlatDialog.tag)
由于上述解决方案在我的情况下不起作用,我通过禁用对话框背景的触摸事件解决了这个问题:
clWelcomeDialog.setOnTouchListener { v, event ->
// disable touch events on the dialog
true
}
clWelcomeDialog
是我的DialogFragment的约束布局。