Android中的全屏DialogFragment


164

我试图显示一个几乎全屏的DialogFragment。但是我不知道怎么做。

我显示片段的方式直接来自android开发人员文档

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

我知道天真地尝试将片段中的RelativeLayout设置为fill_parent以及一些minWidth和minHeight。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

我知道DialogFragment会填满整个屏幕。但是我似乎只在垂直方向调整大小,直到水平调整到一定宽度。

我还尝试按照以下建议在代码中设置窗口属性:http : //groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec。但这也无济于事。

由于我是Android的新手,所以我可能对Android如何处理对话框有一些误解。我该怎么做?有没有其他方法可以达到我的目标?


Android设备:
华硕EeePad Transformer
Android 3.0.1


更新: 我现在设法使其全屏显示,片段中包含以下代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

不幸的是,这不是我想要的。我肯定在对话框周围需要一个小“填充”以显示背景。

任何想法如何做到这一点?



您节省了我的时间,tysm
Arul Mani

Answers:


73

尝试切换到LinearLayout而不是RelativeLayout。测试时,我的目标是3.0 Honeycomb api。

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

布局fragment_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

对我来说,我需要使用RelativeLayout,但是对话框的宽度无法正确调整内容,因此我将RelativeLayout嵌套在LinearLayout中,后者的唯一子级是RelativeLayout ...这触发了适当的宽度调整。
彼得·阿杰泰

1
我测试了所有内容,但可以确认对DialogFragment起作用的唯一方法是将整个布局包装在LinearLayout中。这样,我就可以设置(现在已包装好的)原始布局的宽度和高度...在此上浪费了时间
直到

6
将minWidth和minHeight设置得较大似乎是至关重要的部分。但这是hack,而不是干净的解决方案。以下@David给出的答案(在他给出的链接中有进一步解释)也有效并且很干净。
Garlef Wegart 2014年

@ tir38我认为这不是真的,因为onCreateDialog()已在超类中实现。
starkej2

这应该是公认的答案。精致而清晰
mutiemule,

179

全屏显示DialogFragment

onStart像这样覆盖您的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);
    }
}

非常感谢这篇文章:androids全屏对话碎片的奥秘


6
确实可以,但是我尝试了Videoview,但它不起作用。StatusBar仍然显示。因此,这将我固定在以下代码中:dialog.getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
WhiteHorse 2015年

1
终于解决了,thansk提出了建议@David
Ashu Kumar

1
这对我来说很好。我用过ViewGroup.LayoutParams.WRAP_CONTENT的高度。谢谢。
呆呆的

1
这是干净且非hacky
rommex

7
这不适用于我的情况..它从各个角度显示了一些填充。有什么帮助吗?
Abdul Waheed

144
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
唯一适合我的解决方案。其他人有时在工作,有时却没有。希望我也不会对此例外:)
azertiti 2013年

12
这也对我有用。虽然如果您想让背景透明,则应使用'''android.R.style.Theme_Translucent_NoTitleBar'''
acntwww 2014年

2
密钥正在传递STYLE_NORMAL。这使得对话框像其他任何活动一样填满屏幕。我们可以使用任何主题。对于材质设计,您可以派生材质主题(例如,Theme.AppCompat.NoActionBar保留系统装饰,但删除操作栏)。
rpattabi '16

2
哈哈,当我发射时,出现了黑屏,我认为它已经冻结了。然后我将主题更改为Theme_Light_NoTitleBar_Fullscreen。谢谢,对话框占据了整个屏幕(包括状态栏)。
CoolMind '16

1
Theme_DeviceDefault_Light_NoActionBar_Fullscreen带有白色背景的对话框。
Hitesh Sahu

45

根据此链接,DialogFragment全屏显示了两侧的填充,这将像一种魅力一样起作用。

@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.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

4
即使在2018年,效果也很好!(没有其他事情)谢谢。
AutonomousApps

2
即使在2018年的Android Studio 3.1+中,这也是一个完美的答案,比这里的其他答案更好。其他答案将打破像cardview,微调等Android的UI
陶菲克努尔Rahmanda

1
于2020年魅力十足!
月音

可以,但是如果您想在XML布局中定义边距,则必须使用其他布局包装视图,否则将忽略边距。
Felipe Ribeiro R. Magalhaes

29

通过仅使用样式来制作全屏DialogFragment

第一个解决方案

1.添加到您的style.xml

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

2.添加到您的DialogFragment中:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

替代解决方案

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

AppTheme您在样式中定义的主题在哪里。


这比bradley4的回答更为优雅。
MeLine '18

完美的一线解决方案
me_

两种解决方案均有效,但是第一个解决方案导致剪贴板弹出错误。替代方法效果很好
Janusz Hain 19'Jul

18

就我而言,我使用以下方法:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

再加上LinearLayout,以内容填充所有空间。

但是,对话框的左右边缘与某些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;
}

这就是答案。效果很好。
VonSchnauzer '16

2
我在该线程上尝试了大多数答案,有些可行,但是我丢失了所有应用程序兼容主题样式。我希望这个可以作为AppCompat的父主题使用。它几乎工作。对我来说,我不得不添加2种其他样式: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> 来源:TechRepublic
Breeno '17

15

在使用全屏对话框片段之前,我遇到了这个问题:设置全屏时总是存在填充。在dialogFragment的onActivityCreated()方法中尝试以下代码:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

它可以正常工作,其他解决方案可以更改按钮主题和片段的其他元素。
Yhondri '18

11

就更新Android API而言,建议的显示全屏对话框的方法如下:

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

否则,如果您不希望它全屏显示,则可以这样做:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

希望能帮助到你。

编辑

请注意,我提供的解决方案有效,但存在有时可能会带来麻烦的缺点。将DialogFragment添加到android.R.id.content容器中将使您无法DialogFragment#setCancelable()正确处理该功能,并且在将DialogFragment自身添加到后向堆栈时也可能导致意外行为。

因此,我建议您在onCreate方法中简单地更改DialogFragment的样式,如下所示:

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

希望能帮助到你。


1
我同意。这是Android开发者指南的完整说明:链接
user2274431 2015年

10

尝试在onCreate中使用setStyle()并覆盖不带标题的onCreateDialog make对话框

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

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

或仅重写onCreate()和setStyle并附带代码。

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

8

确实可以取决于布局的定义方式。但是,为了确保对话框具有所需的大小,最好的解决方案是在对话框显示后(而不是在创建时)提供LayoutParams。在DialogFragment上,对话框显示在onStart方法上,因此获取全角的有效方法是:

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

要同时提供主题或样式(如NO_TITLE样式),最好的位置是onCreate方法:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

6

注意:即使在这里也可以找到正确的答案。但我想澄清一个混乱。

将以下代码用于 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);
}

6

和kotlin版本!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
真的行!我还要添加一点,开发人员应通过透明的FrameLayout包装对话框内容,以避免内容变形。
乔治·切博塔列夫

4

这是我解决此问题的方法:

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

3

在style.xml中创建以下主题:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

然后在DialogFragment中设置样式

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}

2

除'_Fullscreen'外,Chirag Nagariya是正确的。可以使用任何非源自Dialog样式的基本样式来解决。也可以使用“ android.R.style.Theme_Black_NoTitleBar”。


1

万一其他人遇到了这种情况,我也有类似的经历,但事实证明,问题是我忘记了从onCreateView返回膨胀视图(而不是返回默认的super.onCreateView)。我只是返回了正确的放大视图,就解决了问题。


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

此解决方案在对话框上应用了全屏主题,类似于onCreate中的Chirag的setStyle。缺点是不使用saveInstanceState。


1

尝试此操作以实现多种用途的通用片段对话框。希望这对您有帮助

public class DialogFragment extends DialogFragment {

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

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @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);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}


1

这是您需要设置为片段的内容:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

在您的情况下:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

又为什么呢 因为DialogFragment(未明确告知时)将使用其内部样式将您的自定义布局包装在其中(没有全屏显示等)。

和布局?不需要黑客方式,这很好用:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    ...
</RelativeLayout>

请享用


1

我回答这个问题很晚了,我仍然想分享这个答案,以便将来任何人都可以使用。

我在项目中使用了此代码,该代码可在较低版本和较高版本中使用。

只需在onCreateDialog()中使用此主题,如下所示:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen-这是此主题的源代码,您可以看到仅此主题足以使DialogFragment以全屏显示。

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

如果有人遇到任何问题,请告诉我。希望这会有所帮助。谢谢 :)


对话框进入全屏状态,但除按钮外,其他所有内容均变为黑色。任何想法 ??
Sagar Nayak

1

即使您在相对布局上,也可以使用以下方法。请按照以下步骤操作:

  1. 转到主题编辑器(在“工具”->“ Android”->“主题编辑器”下可用)
  2. 选择显示所有主题。用AppCompat.Dialog选择一个
  3. 如果您希望它是任何特定的彩色背景或透明背景,请选择android窗口背景选项。
  4. 选择颜色并单击确定。选择新主题的名称。
  5. 转到styles.xml,然后在刚刚添加的主题下,添加以下两个属性:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

对话框的主题设置如下:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

确保主题有父母作为Theme.AppCompat.Dialog 另一种方法是只是做一个新的风格在styles.xml和改变它按照上面的代码。

  1. 转到Dialog Fragment类,然后在onCreate()方法中,将Dialog的样式设置为:

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


1

将其添加到全屏对话框样式下面的行中。

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

或:覆盖fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setStyle(DialogFragment.STYLE_NORMAL,R.style.BottomSheetDialogThemeNoFloating) item name =“ android:windowIsFloating”>假</ item> </ style>
Filipkowicz

0

window.setLayout 对于较旧的设备还不够。

这是我的工作:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

通过使用新的溶液ConstraintLayout被包裹ConstraintLayout在一个LinearLayout与和了minHeight固定minWidth。没有包装,ConstraintLayout将无法获得正确的对话框大小。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

在科特林为我工作

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

以下解决方案对我有用其他解决方案在侧面给了我一些空间,即不是全屏

您需要在onStart和onCreate方法中进行更改

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


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.