2011-12-06 7 views
57

DialogFragment을 사용하고 있는데 눌렀을 때 대화 상자를 닫을 때 이미지를 성공적으로 설정하는 동안 (예 : 닫을 때) 사용자가 외부의 아무 곳이나 클릭 할 때 대화 상자를 닫을 수있는 방법을 찾는 데 어려움을 겪고 있습니다. 일반 대화 상자와 함께 작동합니다. 나는대화 상자 외부를 누르면 DialogFragment를 닫는 방법?

dialogFragment.setCanceledOnTouchOutside(true); 

전화의 일종이있을 것이라고 생각하지만 난 설명서에이 표시되지 않습니다.

DialogFragment으로 가능합니까? 아니면 잘못된 장소를보고 있습니까? '부모'활동에서 터치 이벤트를 가로 채려고했으나 터치 이벤트가 발생하지 않았다는 점을 제외하고 나에게 맞지는 않았다.

답변

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

(Apurv Gupta가 지적한대로) onCreateView으로 호출해야합니다.

+26

반드시 'onCreateView'에서 호출해야합니다. –

+0

취소하지 않고 그냥 닫으려면 어떻게해야합니까? – jjxtra

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

이 잘못 입력했다. 나는 똑같은 문제가 있었다. 이 될 것입니다 안드로이드 모노 자바와 모노 위해 잘 작동 :

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

부지에 근무하지만. onCreateView 안에 getDialog().setCanceledOnTouchOutside(true);을 쓰면 작동하지 않고 내 응용 프로그램이 다운되었습니다.

(내 BaseActivity는 AppCompatActivity이고 내 조각은 android.app.DialogFragment입니다.) . (참)

getDialog() setCanceledOnTouchOutside; 작동 무엇

는 다음 두 라인 중 하나입니다

또는

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

오류

enter image description here

다음과 onCreateView의 코드를 앱 충돌하는 쓰기가 발생합니다! 잘못된 것이 있으면 답변을 업데이트하십시오.