我正在尝试在具有缺口的无Bezeze手机中显示对话框片段。 这是屏幕截图。
如您所见,对话框片段并没有占据整个屏幕,并且在顶部显示出难看的灰色。
这是我尝试过的
我正在DialogFragment中设置样式
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NORMAL, R.style.FullScreenDialogStyle)
}
<style name="FullScreenDialogStyle" parent="Theme.AppCompat.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
我在“活动屏幕”中使用了相同的技术,它的工作原理是它占据了整个无边框屏幕,但这不适用于对话框片段
答案 0 :(得分:1)
您在这里有两个选择。首先,让我们看一下两个选项共有的组件;
DialogFragment的onStart方法:
override fun onStart() {
super.onStart()
val dialog: Dialog? = dialog
if (dialog != null) {
val width = ViewGroup.LayoutParams.MATCH_PARENT
val height = ViewGroup.LayoutParams.MATCH_PARENT
dialog.window?.setLayout(width, height)
dialog.window?.decorView?.systemUiVisibility =
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_FULLSCREEN
}
}
DialogFragment的onCreate方法:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NORMAL, R.style.FullScreenDialogStyle)
}
对话框xml:
<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="#c92145">
<Button android:layout_width="match_parent"
android:layout_height="50dp"
android:text="Lorem ipsum dolor sit amet"/>
</LinearLayout>
FullScreenDialogStyle:
<style name="FullScreenDialogStyle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
左(选项1)
将此行添加到FullScreenDialogStyle
<item name="android:fitsSystemWindows">true</item>
右(选项2)
将此行添加到FullScreenDialogStyle
<item name="android:fitsSystemWindows">false</item>
答案 1 :(得分:0)
在代码中,您应包括android“ windowMinWidthMajor ”和“ windowMinWidthMinor ”属性,并将dialog.getWindow()布局设置为MATCH_PARENT并在LinearLayout中进行布局。
<style name="Theme_Dialog_tab" parent="Theme.AppCompat.Dialog">
<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowBackground">@null</item>
</style>
在Java文件中:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.Theme_Dialog);
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
我希望它将对您有帮助。...!
答案 2 :(得分:0)
我找到了另一个简单的解决方案,尝试将此代码放在 onCreate() 方法上:
Dialog yourDialog;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
yourDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS );
yourDialog.getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
}