2011-12-06 115 views
57

我正在使用DialogFragment,雖然我已成功設置圖像以關閉(即關閉)對話框時按下,我很難找到方法來解除對話框時,用戶單擊任何地方,只要它適用於普通的對話框。我以爲會有某種如何在按下對話框之外時關閉DialogFragment?

dialogFragment.setCanceledOnTouchOutside(true); 

通話,但我沒有看到文檔。

這可能與DialogFragment在所有?或者我看錯了地方?我嘗試在「父母」活動中攔截觸摸事件,但除了沒有收到任何觸摸事件外,對我來說似乎並不合適。

回答

136
DialogFragment.getDialog().setCanceledOnTouchOutside(true); 

必須在onCreateView被調用(如Apurv古普塔指出)。

+26

必須在'onCreateView'中調用 –

+0

如果我不想取消而只是關閉該怎麼辦? – jjxtra

50
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 
     getDialog().setCanceledOnTouchOutside(true); 
     ... 
     } 
1
DialogFragment.getDialog().setCanceledOnTouchOutside(false); 

有人打錯。我有同樣的問題。這工作正常的Java和Mono的Android單將是:

this.getDialog().SetCanceledOnTouchOutside(false); 
18
/** The system calls this only when creating the layout in a dialog. */ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // The only reason you might override this method when using onCreateView() is 
     // to modify any dialog characteristics. For example, the dialog includes a 
     // title by default, but your custom layout might not need it. So here you can 
     // remove the dialog title, but you must call the superclass to get the Dialog. 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setCanceledOnTouchOutside(true); 

     return dialog; 
    } 
+0

這不適合我。我必須根據@Apurv在'onCreateView'中調用'setCanceledOnTouchOutside'。我應該提到,我叫'setCanceledOnTouchOutside(false)' – kimbaudi

0

我會建議只嘗試了上述解決方案後使用我的解決方案。我已經描述了我的解決方案here。簡單來說,我正在檢查DialogFragment.getView()的觸摸邊界。當觸摸點位於DialogFragment之外時,我將解除對話框。

0
  Dialog.SetCanceledOnTouchOutside(true); 

就職於答案我
我的代碼

class dlgRegister : DialogFragment 
     { 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
      { 
    .... 
    .... 
    } 
    public override void OnActivityCreated(Bundle savedInstanceState) 
      { 
       Dialog.Window.RequestFeature(WindowFeatures.NoTitle); 
       Dialog.SetCanceledOnTouchOutside(true); 
       base.OnActivityCreated(savedInstanceState); 
       Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation; 
      } 
    } 
+0

你很接近但不對! – sud007

2

這裏很多,但應用程序崩潰對話框打開時。 寫入getDialog().setCanceledOnTouchOutside(true);裏面onCreateView沒有工作,並崩潰我的應用程序。

(我使用AppCompatActivity作爲我的BaseActivity和android.app.DialogFragment作爲我的片段)。

什麼工作是以下兩種行:

getDialog()setCanceledOnTouchOutside(真)。

OR

this.getDialog()setCanceledOnTouchOutside(真)。

onActivityCreated

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom; 
     //getDialog().getWindow().setDimAmount(0.85f); 
     getDialog().setCanceledOnTouchOutside(true);//See here is the code 
    } 

不要用什麼:

DialogFragment.getDialog()。setCanceledOnTouchOutside(假);

拋出以下錯誤

enter image description here

而且在onCreateView編寫代碼崩潰的應用程序! 如果您發現有問題,請更新答案。

相關問題