如何使DialogFragment宽度为Fill_Parent

 无 发布于 2023-01-12 10:51

您好我正在使用Android应用程序,我用它DialogFragment来显示对话框,但它的宽度非常小.我怎样才能达到这个宽度fill_parent呢?

public class AddNoteDialogFragment extends DialogFragment {

    public AddNoteDialogFragment() {
        // Empty constructor required for DialogFragment
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getDialog().setTitle(getString(R.string.app_name));
        View view = inflater.inflate(R.layout.fragment_add_note_dialog,
                container);

        return view;
    }


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

        // request a window without the title
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        return dialog;
    }
}

fragment_add_note_dialog.xml




    

    

在此输入图像描述

提前致谢.

8 个回答
  • 对我来说,当我用RelativeLayout替换onCreateView中膨胀的布局的LinearLayout父级时,它可以工作.无需更改其他代码.

    2023-01-12 10:52 回答
  • 这是我想出来解决这个问题的解决方案:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);    
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    
        return dialog;
    }
    
    @Override
    public void onStart() {
        super.onStart();
    
        Dialog dialog = getDialog();
        if (dialog != null) {
           dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
           dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }
    }
    

    编辑:

    onCrateView在返回膨胀视图之前,您可以在Fragment方法中使用以下代码.

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    

    2023-01-12 10:52 回答
  •     <!-- A blank view to force the layout to be full-width -->
        <View
            android:layout_
            android:layout_
            android:layout_gravity="fill_horizontal" />
    

    在我的对话框布局的顶部做了伎俩.

    2023-01-12 10:53 回答
  • 我想澄清一下。两种方法都是正确的,但是使用不同的DialogFragment

    使用 android.app.DialogFragment

    @Override
    public void onStart()
    {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    

    使用 android.support.v4.app.DialogFragment

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    }
    

    2023-01-12 10:53 回答
  • 这对我有用

    创建自定义样式:

       <style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog">
        <item name="android:windowMinWidthMajor">97%</item>
        <item name="android:windowMinWidthMinor">97%</item>
       </style>
    

    在对话框中使用此样式

    public class MessageDialog extends DialogFragment {
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
    }
    
    // your code 
    }
    

    2023-01-12 10:53 回答
  • 您是否尝试使用Elvis的答案如何使警报对话框填充90%的屏幕尺寸?

    它是以下内容:

    dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    

    更新:

    上面的代码应该添加到内部的onStart()方法中DialogFragment.

    LayoutParams.FILL_PARENT不推荐使用LayoutParams.MATCH_PARENT.

    2023-01-12 10:53 回答
  • 就我而言,我也使用了以下方法:

        @Override
        public void onStart() {
            super.onStart();
            getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height));
        }
    }
    

    但是对话框的左右边缘和一些Lollipop +设备(例如Nexus 9)的屏幕边缘之间仍然存在小的间隙.

    这并不明显,但最后我发现要在所有设备和平台上使其全宽,应在styles.xml中指定窗口背景,如下所示:

    <style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowBackground">@color/window_bg</item>
    </style>
    

    当然,我们在创建对话框时需要使用这种样式,如下所示:

        public static DialogFragment createNoTitleDlg() {
            DialogFragment frag = new Some_Dialog_Frag();
            frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
            return frag;
    }
    

    2023-01-12 10:54 回答
  • public class FullWidthDialogFragment extends AppCompatDialogFragment {
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_AppCompat_Light_Dialog_Alert);
        }
    }
    

    如果你想要更多的灵活性可以扩展AppCompat_Dialog_Alert和自定义属性

    2023-01-12 10:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有