Android设置windowIsFloating为false的dialog可以被软键盘顶起

本文介绍了一种使Android Dialog不被软键盘覆盖的方法。通过调整窗口浮动属性并使用特定标志,可以使Dialog随着软键盘的弹出而上升,避免内容被遮挡。详细探讨了FLAG_LAYOUT_IN_SCREEN的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做需求要求dialog可以被软键盘顶起来而不是覆盖,找了找方法后发现,将主题中的windowIsFloating属性设置为true时就可以达到想要的效果,windowIsFloating意思是dialog是否悬浮在activity上

 <item name="android:windowIsFloating">true</item>

但是,windowIsFloating设置为true的时候dialog可屏幕两边总有一段空白,不能达到全屏宽,然后看了PhoneWindow的源码发现,windowIsFloating决定了dialog使用两套不同的xml布局,笔者猜是在布局里有padding或者margin,然后笔者在源码中发现:


 
        mIsFloating = a.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false);
        int flagsToUpdate = (FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR)
                & (~getForcedWindowFlags());
        if (mIsFloating) {
            setLayout(WRAP_CONTENT, WRAP_CONTENT);
            setFlags(0, flagsToUpdate);
        } else {
            setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);
        }

windowIsFloating为true时会设置不同的Flags,笔者试着将源码直接使用到笔者的自定义dialog中,dialog可以被软键盘顶起来了!!!
后面我又做了测试发现是FLAG_LAYOUT_IN_SCREEN这个值起了效果,笔者没有继续探索具体原因,现在可以达到需求的要求了

在 BottomSheet 弹起后,背景变灰色是因为使用了默认的 BottomSheet 样式。 如果想要去掉背景变灰的效果,可以在 BottomSheet 的布局文件中设置 `android:background` 属性为透明(`#00000000`),或者在代码中使用 `setBackgroundColor(Color.TRANSPARENT)` 来设置背景透明。 另外,如果想要自定义 BottomSheet 的样式,可以通过设置 BottomSheet 的主题来实现。具体步骤如下: 1. 在 styles.xml 文件中定义 BottomSheet 的主题,示例如下: ``` <style name="AppBottomSheetDialogTheme" parent="Theme.Design.BottomSheetDialog"> <item name="android:background">@android:color/transparent</item> <item name="android:windowIsFloating">false</item> <item name="android:windowSoftInputMode">adjustResize</item> </style> ``` 上面的主题继承自 `Theme.Design.BottomSheetDialog`,并设置了背景为透明,窗口不浮动,软键盘弹出时自动调整布局等属性。 2. 在代码中使用该主题创建 BottomSheetDialog,示例如下: ``` BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.AppBottomSheetDialogTheme); View view = LayoutInflater.from(this).inflate(R.layout.your_bottom_sheet_layout, null); dialog.setContentView(view); dialog.show(); ``` 上面的代码中,使用了 `AppBottomSheetDialogTheme` 主题创建了一个 BottomSheetDialog,然后设置了底部弹出的布局,并显示出来。 通过上述方法,可以自定义 BottomSheet 的样式,同时避免默认情况下背景变灰的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值