场景
要在页面上弹一个非全屏的 dialog,就写了个非全屏的布局,就使用常规的 Dialog 来创建,布局写成非全屏的,style 使用如下:
<style name="dialogStyle" parent="android:Theme.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
```
代码如下:
```kotlin
private var dialog:Dialog? = null
private fun showDetailDialog() {
if (null == detailDialog) {
dialog = Dialog(this, R.style.lockDialog)
dialog.apply {
setContentView(R.layout.dialog_detail)
...
}
}
dialog?.show()
}
正常这种情况下,如果 dialog_detail 的根布局宽高未设置的占满屏幕,dialog 就会是非全屏效果,其它部分是半透明的,结果用 java 代码正常,用 kotlin 时,一个dialog 正常,一个页面却不正常,排查发现原因如下:
关键在第 5 行,这里带 ? 和不带 ? 是有区别的,因为声明的 dialog 是可空的,这里因为已经在上面判空了,所以第 5 不写 dialog? 不会报错,但是这样写布局会变成全屏的;要写成 dialog?.apply{} 才会符合预期。