【问题标题】:How do I display a full-width DialogFragment?如何显示全角 DialogFragment?
【发布时间】:2013-05-21 16:06:28
【问题描述】:

我正在尝试创建一个自定义DialogFragment,它延伸到我的屏幕的整个宽度(或者更确切地说,父片段)。虽然我可以让DialogFragment 的边框透明,但左右两边还是有一个我无法去掉的填充。

这是我的片段:

public static class LoaderDialog extends DialogFragment {

    static LoaderDialog newInstance() {
        LoaderDialog f = new LoaderDialog();

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.loader_f, container, false);

        WindowManager.LayoutParams p = getDialog().getWindow().getAttributes();
        p.y = getSupportActionBar().getHeight();

        getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        getDialog().getWindow().setGravity(Gravity.TOP);
        getDialog().getWindow().setAttributes(p);

        return view;
    }
}

这是一张图片,它的样子:

如您所见,DialogFragment(红色的东西)在侧面有一些边距。我希望那些消失。知道如何做到这一点(如果可能,在 java 中)?

【问题讨论】:

  • Android dialog width 的可能重复项
  • 感谢您的链接。但是,我之前尝试过p.width = LayoutParams.FILL_PARENT;,但没有成功。所以UMAR的答案似乎对我没有帮助。

标签: android android-dialogfragment


【解决方案1】:

你可以使用:

WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
wmlp.gravity = Gravity.FILL_HORIZONTAL; 

完整示例:

public class TextEditor extends DialogFragment {

    public TextEditor () {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_text_editor, container);

        WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
        wmlp.gravity = Gravity.FILL_HORIZONTAL;

        return view;
    }
}

【讨论】:

  • 此解决方案有效,但根布局不应是协调器布局
  • 非常感谢。像宝石一样工作。
【解决方案2】:

试试这个:

p.horizontalMargin = 0;

【讨论】:

    【解决方案3】:

    为 DialogFragment 使用这种风格

    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    

    或者在DialogFragment的onCreateView方法中使用这段代码

        Display display = getActivity().getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, **220**, getResources().getDisplayMetrics());
        getDialog().getWindow().setLayout(width,px);
    

    ps。 220 是 DialogFragment 的高度,随意更改

    【讨论】:

      【解决方案4】:

      在您的 style.xml 文件中创建一个样式元素。将以下代码复制到您的 style.xml 文件中

      <style name="CustomDialog" parent="@android:style/Theme.Holo.Light" >
      <item name="android:windowBackground">@null</item>
      <item name="android:windowIsFloating">true</item>
      

      然后在你的DialogFragment类的createDialog方法中,

      dialog = new Dialog(getActivity(), R.style.CustomDialog);
      

      这对我有用,希望这对你也有帮助

      【讨论】:

        【解决方案5】:

        尝试改用 LayoutParams.MATCH_PARENT。不推荐使用 Fill_parent。此外,如果您为视图设置了正常的填充,但不会填充其父视图。

        【讨论】:

        • MATCH_PARENT 产生相同的结果
        • 是的,但如果你为 Android 2.2+ 做应用程序,你应该选择 MATCH_PARENT 而不是 FILL_PARENT。重命名发生在 api 级别 8。
        • 这根本不重要,因为它们在代码中代表相同的值(准确地说是-1)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        相关资源
        最近更新 更多