android - 为什么我的 DialogFragment 在 Android 11 中没有全屏出现?

标签 android android-layout android-dialogfragment

这让我抓狂,所以希望有人能提供帮助。

我有一个 dialogfragment 用于从列表中进行选择。我全屏显示它,它在 11/API 30 之前一直有效。但是,现在在 11 中它开始以经典的“非全屏”外观出现,您可以在所有四个方面看到它背后的布局。

我通过覆盖 onCreateDialog 方法让它再次工作,见下文。在该方法中,我基本上复制了我已经在 onStart() 中进行的调用,如下所示...

我的问题是为什么我必须这样做?它在 11/30 版本之前工作正常,我还没有找到任何文档提到 11 中与此相关的任何更改。

如果有比我知识渊博的人能帮助我理解,那就太好了。

我必须添加的新方法:

@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    return dialog;
}

我的 onStart 使窗口在 11 点之前显示正常:

public void onStart() {
    super.onStart();
    Window window = getDialog() != null ? getDialog().getWindow() : null;
    if (window != null) {
        if (windowAnimStyle > 0) {
            window.getAttributes().windowAnimations = windowAnimStyle;
            }
            window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);
            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);

            window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }
    }

最佳答案

这对我适用于 sdk 30

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

在 DialogFragment 子类中覆盖 onCreate

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle)
}

关于android - 为什么我的 DialogFragment 在 Android 11 中没有全屏出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64221809/

相关文章:

android - 为什么有时需要在列表中使用 key() ?

android - 适用于 Android 的 Glympse : Obtaining API key

android - Android 中的分组水平按钮组

android - 强制用户在对话框中选择选项

android - DialogFragment FEATURE_NO_TITLE 已缩小

android - Galaxy Nexus 在使用 crop Intent 时出现循环

android - Activity 中出现错误

android - 膨胀类 fragment 时出错 | fragment 没有创建 View

android - 在 Touch Android 上具有拖动、滚动和缩放功能的三角形 ImageView

android - 带有 CollapsingToolbarLayout 的 CoordinatorLayout 与对话框 fragment 中的键盘中断