全屏DialogFragment

时间:2012-08-09 15:58:58

标签: android android-dialogfragment

我正在尝试创建一个宽度为MATCH_PARENT的DialogFragment,因此对话框几乎全屏(在浮动外观的边缘留下填充)。我已经看到了这个解决方案Full Screen DialogFragment in Android,但我试图避免将宽度设置为1000dp。使用我当前的布局,无论是使用FILL_PARENT还是MATCH_PARENT,它似乎都将宽度和高度设置为WRAP_CONTENT。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

我已经将此解决方案用于Dialog(而不是DialogFragment),它按预期工作:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

10 个答案:

答案 0 :(得分:37)

这对我来说很完美。何时扩展 DialogFragment 覆盖onCreateView() ... impelments all logic

对话框使其全屏覆盖此方法

 @Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

答案 1 :(得分:21)

尝试切换到RelativeLayout而不是LinearLayout。它适用于我的情况

答案 2 :(得分:8)

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE,android.R.style.Theme_Holo_Light);
}

答案 3 :(得分:3)

这个答案对我有帮助 How to set DialogFragment's width and height?

int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));

答案 4 :(得分:2)

我找到的最佳解决方案是将宽度或minWidth设置为某​​个任意大的值,以确保它填满屏幕。我不喜欢这个解决方案,但我还没有看到更好的东西。

答案 5 :(得分:1)

在我的代码中,我想要一个全屏对话框,但仍然会在屏幕顶部显示通知栏,所以我正在使用:

"(?U)\\b[\\p{Upper}\\p{Space}\\p{Punct}]{2,}\\b"

这使它全屏,但我没有使用全屏风格,所以我保留了通知栏。

希望它有所帮助!

答案 6 :(得分:1)

你也可以做类似的事情 -

@Override
  public void onCreate(@Nullable final Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      setStyle(STYLE_NO_TITLE, android.R.style.Theme_Material_Light_NoActionBar_Fullscreen);
    } else {
      setStyle(STYLE_NO_TITLE, android.R.style.Theme_DeviceDefault_Light_NoActionBar);
    }
    super.onCreate(savedInstanceState);

  }

通过此,您还可以看到版本的状态栏为&gt; = lollipop

答案 7 :(得分:1)

我已经回答了这个问题并解释了这是最简短有效的方法。请检查In this thread

希望这会有所帮助:)

答案 8 :(得分:0)

在DialogFragment上工作。在onCreateView()添加以下

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //…
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    //…
    return view;
}

答案 9 :(得分:0)

要拥有全屏对话框,您需要使用

public class CustomDialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout to use as dialog or embedded fragment
        return inflater.inflate(R.layout.purchase_items, container, false);
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }
}

并显示此对话框:

CustomDialogFragment newFragment = new CustomDialogFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
fragmentManager.beginTransaction().add(android.R.id.content, newFragment).commit();

注意:您无法使用以下代码显示对话框,否则,对话框将显示在屏幕中央,而不是全屏。

//don't show dialog like this
newFragment.show(fragmentManager, "dialog");