2011-12-06 15 views
57

DialogFragment kullanıyorum ve basıldığında iletişim kutusunu kapatmak için bir görüntüyü başarılı bir şekilde ayarladığım sırada, kullanıcı dışarıda herhangi bir yeri tıklattığında iletişim kutusunun kapanışını bulmakta zorluk çekiyorum. normal diyaloglarla çalışır. Bir çeşitİletişim kutusunun dışına basarken DialogFragment nasıl iptal edilir?

çağrı olacağını düşündüm, ancak belgede bunu göremiyorum.

DialogFragment ile bu mümkün mü? Yoksa yanlış yerlere mi bakıyorum? 'Ebeveyn' aktivitesinde dokunma olaylarını engellemeye çalıştım ama herhangi bir dokunma olayı almama dışında, bana doğru görünmüyordu.

cevap

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

(Apurv Gupta belirttiği gibi) onCreateView denilen olmalı.

+26

'onCreateView' içinde çağrılmalıdır ' –

+0

İptal etmeyi istemiyorum, ancak kapatmak yerine ne olur? – jjxtra

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

Bu yanlış yazıyor edildi. Bende aynı problem vardı. Bu olacak android Mono Java ve Mono çalışıyor:

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

bu benim için çalışmadı. @Apurv başına "onCreateView" içinde "setCanceledOnTouchOutside" öğesini çağırmak zorunda kaldım. 'SetCanceledOnTouchOutside (false)' – kimbaudi

0

Ben sadece yukarıdaki çözümler denedikten sonra benim çözüm kullanmayı öneriyoruz. Çözümü here açıkladım. Kısaca, DialogFragment.getView() öğesinin dokunma sınırlarını kontrol ediyorum. Temas noktaları, DialogFragment dışında olduğunda, Iletişim kutusunu reddediyorum. iletişim açtığında

0
  Dialog.SetCanceledOnTouchOutside(true); 

, uygulama kazasında burada cevapların beni
Benim Kod

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

'den aradığımdan bahsetmeliydim. – sud007

2

Lot için çalıştı ama. onCreateView'un içinde getDialog().setCanceledOnTouchOutside(true); yazımı uygulamam ve uygulamamı kilitlemedi.

(AppCompatActivity BaseActivity ürünüm ve android.app.DialogFragment bölümüm olarak kullanıyorum). . (Doğru)

getDialog() setCanceledOnTouchOutside;: çalıştığını Ne

aşağıdaki iki satırlardan biri olan

TD

this.getDialog() setCanceledOnTouchOutside (doğru).; onActivityCreated içindeki

kullanmamayı ne
@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 
    } 

gibi:

DialogFragment.getDialog().setCanceledOnTouchOutside (yanlış);

hata

enter image description here

aşağıdaki Ve onCreateView kod App çöker yazma atıyor! Lütfen yanlış bir şey bulursanız, cevabı güncelleyin.

İlgili konular