Mat*_*ias 4 android android-layout android-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;
}
Run Code Online (Sandbox Code Playgroud)
我的 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));
}
}
Run Code Online (Sandbox Code Playgroud)
这对我的 sdk 30 有效
<style name="FullScreenDialogStyle">
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)
重写 DialogFragment 子类中的 onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |