解决系统界面高度变化——WindowInsets
目次
Android开发中,输入框作为最最基础的View之一,使用的频率是非常非常高的。
有输入框的地方就有软键盘,我知道有softinputmode可以设置软键盘弹起的行为,这只能响应软键盘弹起后整个Activity的应对行为。如果我想要拿到软键盘高度呢,这是softinputmode做不到的。你可能已经想到了监听View的变化,得到一个高度值,超过了某个阈值就认为软键盘已经弹起了。没错,这是之前常用的方式,要是我想软键盘高度会改变,怎么办?
WindowInsets #
WindowInsets是什么?window是窗口,对Android开发来说很熟悉,inset在Cambridge dictionary上解释为内衬,两个放在一起就是窗口的内衬。窗口的内衬也就是有东西占用了一部分窗口的内容,放上图片更容易理解。

WindowInsets的Window其实和Window不太一样,Android的内容显示是依赖Window的,应用中状态栏、导航栏虽然视觉效果是在应用中,其实都是在SystemUI中显示的,是在另一个Window中。所以WindowInsets中的可以理解成手机屏幕这样一个视觉窗口。
WindowInsets被设计出来就是要解决上面的这种场景的。你需要为接受软键盘高度变化的View设置一个listener,当软键盘变化时,就能从listener中拿到软键盘新的高度并做出对应处理。
|
|
细心的你也许发现了WindowInsetsCompat.Type.ime(),Type中也是有其他的类型的。像是systemBars、systemGestures等等,详细的列表你可以在在应用中全屏显示内容,并在 Compose 中处理窗口边衬区中找到。
参考 #
在应用中全屏显示内容,并在 Compose 中处理窗口边衬区
Categories: