这个属性的真正作用是什么?
我已经阅读了文档,并且理解它应该是什么。但是,当我在主题中使用它时(我创建了一个以android:Theme.Dialog
为父的样式),更改此属性的值似乎没有任何效果。
我不知道设置windowIsFloating
为的所有效果true
,但我注意到的一件事是,当它设置为 时true
,活动不会扩展宽度以填充屏幕,即使您将布局宽度设置为match_parent
(即android:layout_width="match_parent"
)
从我的实验来看,它似乎会影响窗口对软输入的反应。如果您将此设置为 false,则当键盘可见时,窗口不会向上滑动。
当您使用Dialog Theme时,此属性默认为 true。
<style name="Base.V7.Theme.AppCompat.Light.Dialog" parent="Base.Theme.AppCompat.Light">
...
<item name="android:windowIsFloating">true</item>
...
</style>
在这种情况下,Dialog
将使用以下代码创建 PhoneWindow:
if (mIsFloating) {
setLayout(WRAP_CONTENT, WRAP_CONTENT);
setFlags(0, flagsToUpdate);
}
这将导致 contentView 总是将内容包装得尽可能小。您可以将其设置为 false 或手动将Dialog
窗口布局更新为 MATCH_PARENT,如下所示:
override fun onStart() {
super.onStart()
dialog?.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
}
我正在使用非常幼稚的代码来显示底部工作表对话框片段。但是,我的对话框在浅色模式下覆盖了底部导航栏。见下图:
将该项目添加到我的对话框主题后,此问题得到解决。
<style name="myTheme" parent="Theme.MaterialComponents.BottomSheetDialog">
<item name="android:windowSoftInputMode">stateAlwaysHidden|adjustNothing</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowIsFloating">false</item>
</style>