如何将对话框设置为全屏显示?

161

我有一个 GridView,我想实现一个对话框,在该对话框中选定的图片应该以全屏模式显示。

那么我如何使对话框以全屏模式显示呢? 谢谢!


2
如果您想使用全屏“Dialog”,为什么不直接使用图像文件的默认“ACTION_VIEW”“Intent”呢? - Will Tate
抱歉,我的意思是几乎全屏或全图像。 - user790156
3
与回答willytate相关,如果你必须对话框进行操作,则在主题中使用android.R.style.Theme_Translucent_NoTitleBar_Fullscreen。 - ingsaurabh
这可能会有所帮助https://dev59.com/P3I95IYBdhLWcg3wvgl9#2700683 - Sheraz Ahmad Khilji
我不理解为什么这个问题被关闭了。很烦人。有一个建议,但是不能发布。向@Andrew Barber致敬!!! -.- - Martin Pfeffer
3
@MartinPfeffer 我也有一个关于未来用户的建议,但问题已关闭。Andrew Barber并不来自Android社区。这是一个非常简单的问题,新的Android开发者总是对此很好奇。这个问题应该重新开放以获得更好的答案,并为未来的用户提供帮助。 - Abhishek Singh
5个回答

268
尝试
Dialog dialog=new Dialog(this,android.R.style.Theme_Black_NoTitleBar_Fullscreen)

31
为了让这对我起作用,我必须使用android.R.style.Theme_Black_NoTitleBar_Fullscreen。 - Ben Clayton
4
该调用需要 API 级别为 11。 - Luis A. Florit
23
全屏模式下带有标题栏怎么办? - Heath Borders
2
当我使用DialogFragment时,我发现状态栏颜色被对话框覆盖了,整个屏幕都是对话框的背景颜色。有人知道解决方法吗?我尝试设置对话框窗口的statusBarColor,但没有效果。另外,导航栏颜色也会被覆盖。 - androidguy
1
在 Kotlin 中,它是这样的:dialog = Dialog(context!!, android.R.style.Theme_Black_NoTitleBar_Fullscreen) - Shailendra Madda
显示剩余7条评论

109
根据此链接,正确的答案(我已经测试过)为:将此代码放入对话框的构造函数或onCreate()方法中。
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT);

此外,将对话框的样式设置为:

<style name="full_screen_dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>

通过构造函数可以实现此功能,例如:

public FullScreenDialog(Context context)
{
  super(context, R.style.full_screen_dialog);
  ...

编辑:除了上述所有内容的替代方法是将样式设置为android.R.style.ThemeOverlay,就这样。

编辑2:为了支持Material库,在应用程序(模块)的build.gradle文件中添加Gradle依赖项。

implementation "com.google.android.material:material:$material_version"

然后将对话框的主题设置为 R.style.ThemeOverlay_MaterialComponents


通过我的尝试,这是唯一有效的方法。android.R.style.ThemeOverlay 是关键。 - Yeung
@Yeung 我想知道ThemeOverlay.MaterialComponents是否也适合。你能帮我确认一下吗? - android developer
1
尝试过了。它可以工作,但是由于我正在使用旧的Android 5设备进行开发,不知道它是否有用。 - Yeung
@Yeung 我认为这比我写的更好。支持新材料库。你能否告诉我你具体做了什么,这样我就可以更新我的答案?或者你可以编辑我的答案吗? - android developer
处理旧问题时,刚发现这也具有参考价值 getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(any bg color)); 将“扩展”对话框的宽度到全屏,无需设置主题 android.R.style.ThemeOverlay。请注意,仅适用于“宽度”。 - Yeung
对我来说,ThemeOverlay.MaterialComponents 就足够了。谢谢。 - Ahmad Reza Enshaee

67

我发现最简单的方法

Dialog dialog=new Dialog(this,android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        dialog.setContentView(R.layout.frame_help);
        dialog.show();

无法更改背景颜色,仍为黑色。 - Jemshit Iskenderov

46

编辑 在StackOverflow允许我们对答案进行版本控制之前,这是适用于Android 3及以下版本的答案。请不要因为它现在不能为您工作而将其投票降低,因为它绝对可以在旧版Android上运行。


您只需要在onCreateDialog()方法中添加一行代码:

@Override
protected Dialog onCreateDialog(int id) {
    //all other dialog stuff (which dialog to display)

    //this line is what you need:
    dialog.getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN);

    return dialog;
}

1
为什么我不能使用FLAG_FULLSCREEN? - user790156
2
那很难说 - 你导入了LayoutParams吗?你的布局xml设置为fill_parent或match_parent了吗? - Caspar Harmer
13
使用android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN。 (注:该代码用于Android应用程序的全屏显示设置) - Derzu
1
错误:FLAG_FULLSCREEN 无法解析或不是一个字段 - Luis A. Florit
2
这个答案可能已经过时了 - 它可能不适用于Android 4.0及以上版本。 - Caspar Harmer
显示剩余5条评论

44
dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.loading_screen);
    Window window = dialog.getWindow();
    WindowManager.LayoutParams wlp = window.getAttributes();

    wlp.gravity = Gravity.CENTER;
    wlp.flags &= ~WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
    window.setAttributes(wlp);
    dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    dialog.show();

试试这个。


2
MATCH_PARENT 对我有用。 - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接