2012-12-11 14 views
16

私はDialogFragmentの背景を完全にクリアしようとしています。透明な背景(淡色ではない)のダイアログフラグメント

スタイルアイテムandroid:windowIsFloatingをtrue(デフォルト)に設定すると、 DialogFragmentは正確にどのように表示されるのですか、背景は非常に薄暗くなります。

falseにandroid:windowIsFloatingを設定することにより、私は私が望む明確な背景を得るが、DialogFragmentは は、あなたがそれをオーバーレイ表示に見抜くことができ、その周りだけの小さなギャップを残して、画面の約95%に吹きます。

私は多少の調整をしましたが、この動作を無効にすることはできません。

希望の効果を得るにはPopupWindowを使用する必要がありますか、それともいくつかのスタイルがありますか? の項目はオーバーライドできますか?

+0

の場合には私のために動作します。うまくいけば、これはそれをするでしょう... – samosaris

答えて

53

何私の作品はDialogFragmentonStart()WinowManager.LayoutParamsを調整することです:

@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); 
} 
+0

非常にきれいな...私はこれを使用することができます場合は表示されます。ありがとう! – samosaris

+4

+1、私のために働く。 ** **全く暗くはない**では、 'windowParams.dimAmount = 0;'を使います。また、これは 'onCreateView()'ではなく 'onStart()'で行う必要があります。 – Jonik

+1

'onStart()'でのみ動作するのはなぜですか?なぜ 'onCreateView()'にはありませんか? – zIronManBox

3

あなたは、(.SHOWが呼び出されたいつか後に)あなたのDialogFramentへのハンドルを取得する必要があり と投稿のRunnableで次の操作を行います。

DialogFragment dialog; 

... 

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

私はChanging position of the Dialog on screen androidにALEKS Gの答えからそれを得ました。

2

でも簡単な解決策はDialogFragmentののonCreateでスタイルを変更することです:

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

これはダイアログのタイトルも削除します – velis

1

作成独自のカスタマイズされたダイアログボックスがFragmentDailog に拡張され、このメソッドをオーバーライドします。

@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; 
} 

注:この答えは、私はちょうどLayoutParameterフラグWindowManager.LayoutParams.FLAG_DIM_BEHINDに出くわしたDialogFragmentBottomSheetDialogFragment