为什么我的DialogFragment在安卓11中没有全屏显示?

3

这让我很困扰,希望有人能帮忙。

我有一个对话框片段,用于从列表中选择。我将其设置为全屏,之前一直可以正常使用,但在11 / API 30之后开始出现经典的“非全屏”外观,你可以在四个方向上看到它后面的布局。

通过覆盖onCreateDialog方法,我再次使其正常工作,见下文。在那个方法中,我基本上重复了我已经在onStart()中调用的方法,如下所示...

我的问题是为什么我不得不这样做?在版本11/30之前,它可以正常工作,并且我没有找到任何与此相关的更改的文档。

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

我必须添加的新方法:

@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));
        }
    }
1个回答

6

在 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)
}

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