2012-12-11 7 views
16

Tamamen açık olmak için DialogFragment'un arka planını almaya çalışıyorum.DialogFragment açık arka planlı (soluk değil)

gerçek (varsayılan) stil öğesi android:windowIsFloating ayarı ile

, DialogFragment görüntüler Ben istiyorum, ama çok karartılmış arka plana sahip tam olarak nasıl. false android:windowIsFloating ayarlayarak

, istediğim net bir arka plan olsun, ama üzerine yerleştirileceği görünümüne aracılığıyla görebileceğiniz DialogFragment çevresinde sadece küçük bir boşluk bırakarak ekranın yaklaşık% 95, kadar darbeler.

Ton'un ince ayarını denedim ve bu davranışı geçersiz kılacak görünmüyor.

İstenilen efektleri elde etmek için PopupWindow kullanmam gerekir mi, yoksa geçersiz kıldığım bazı stil öğeler var mı?

+0

durumunda benim için çalışıyor. Umarım bu yapacağız ... – samosaris

cevap

53

DialogFragment arasında onStart() yılında WinowManager.LayoutParams ayarlamaktır Kendi Özelleştir iletişim kutusu FragmentDailog ile genişler ve bu yöntemi geçersiz kılar

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 

    //set the dialog to non-modal and disable dim out fragment behind 
    Window window = dialog.getWindow(); 
    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
    return dialog; 
} 

NOT: Bu cevap sadece LayoutParameter bayrak WindowManager.LayoutParams.FLAG_DIM_BEHIND rastladı DialogFragment ve BottomSheetDialogFragment

+0

Çok temiz ... Bunu kullanıp kullanamayacağımı göreceğim. Teşekkürler! – samosaris

+4

+1, benim için çalışıyor. ** için ** hiç loş değil, windowParams.dimAmount = 0; 'kullanın. Ayrıca, bunu onCreateView() 'de değil, onStart()' da yapmalısınız. – Jonik

+1

Neden sadece onStart() 'da değil, neden onCreateView()' da çalışmıyor? – zIronManBox

3

Bir Yayınlanan Runnable içinde (bazen denir .show sonra) DialogFrament için bir tanıtıcı elde, ve bunu yapmak gerekir:

DialogFragment dialog; 

... 

WindowManagerLayoutParams wlp = dialog.Dialog.Window.Attributes; 
wlp.Flags &= ~WindowManagerFlags.DimBehind; 
dialog.Dialog.Window.Attributes = wlp; 

Ben Changing position of the Dialog on screen android için Aleks G'nin cevap aldım.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(STYLE_NO_FRAME, getTheme()); 
} 
2

: benim için çalışıyor Ne

+0

Bu, diyalog başlığını da kaldırır – velis

1

oluşturun: Hatta daha basit bir çözüm DialogFragment arasında onCreate stili değiştirmektir

@Override public void onStart() { 
    super.onStart(); 

    Window window = getDialog().getWindow(); 
    WindowManager.LayoutParams windowParams = window.getAttributes(); 
    windowParams.dimAmount = 0.90f; 
    windowParams.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
    window.setAttributes(windowParams); 
}