如何禁用Dialogfragment在Android上点击外部?

时间:2017-05-17 07:50:45

标签: android

我使用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上禁用对话框外部的点击?

感谢。

6 个答案:

答案 0 :(得分:4)

根据您的要求,您应使用 setCancelable(true)

Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 1 :(得分:2)

在show之前在DialogFragment中设置.setCancelable(false)。

select e.id,e.Amount,i.ColuName
 from FixAm  e
inner join InCo i on i.CCode=e.CCode
where cid=49 

答案 2 :(得分:0)

请使用dialog.setCancelable(boolean)方法。 感谢

答案 3 :(得分:0)

onCreateView中的普通setCancelable(false)(没有Dialog。)为我工作

答案 4 :(得分:0)

在DialogFragment的onCreateView中写入setCancelable(false);。 就是这样。

答案 5 :(得分:0)

科特琳 覆盖DialogFragment中的onCreateDialog

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val dialog = super.onCreateDialog(savedInstanceState)
    dialog.setCancelable(false)
    dialog.setCanceledOnTouchOutside(false)
    return dialog
}