Android 11 中的新功能之一是可以让应用在对于屏幕上的软键盘打开和关闭的过程创建无缝过渡的动画效果,这一功能源自 Android 11 中对 WindowInsets API 的大量改进。
在 Android 11 上有两个针对该功能的例子——这个功能已经被集成到 Google Search 应用和 Messages 应用中了:
两个 Android 11 中软键盘动画效果的示例: Google Search 应用 (左),Messages (右)
Android 11
https://developer.android.google.cn/android11
WindowInsets
https://developer.android.google.cn/reference/kotlin/android/view/WindowInsets
Google Search
https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&hl=en_GB
Messages
https://play.google.com/store/apps/details?id=com.google.android.apps.messaging
让我们来看看如何在您的应用中添加这种用户体验。总共分为三步:
首先,我们需要做到 "边到边" (edge-to-edge);
第二步,应用需要针对边衬区动画做出反应;
最后第三步就是应用在恰当的场景中控制并使用边衬区动画。
上面的每一步都环环相扣,所以我们会在不同的文章中分别介绍。在这个系列的第一部中,我们会介绍如何实现边到边,以及 Android 11 中相关 API 的改动。
实现边到边 (edge-to-edge)
去年我们介绍了一个关于实现 "边到边" 的概念,这个方法可以让应用深度利用 Android 10 的手势导航: 开启全面屏体验 | 手势导航 (一)。
简单回顾一下,实现 "边到边" 会让您的应用渲染在系统状态栏的后面,如左图所示。
引用去年我自己的话:
实现从边到边的全面屏体验后,系统栏会覆盖在应用内容前方。应用也得以通过更大幅面的内容为用户带来更具有冲击力的体验。
实现边到边跟软键盘有什么关系?
其实,实现边到边不单单只是在状态栏和导航栏之后渲染。应用本身需要开始负责处理那些跟应用重叠的系统 UI 的部分。
正如我们前面提到的,两个最直观的例子是状态栏和导航栏。除此之外还有软键盘,有时候也叫 IME (输入法编辑器),这是另外一个我们需要了解的系统 UI 。
应用如何实现边到边?
如果我们回想去年的介绍,实现边到边可以分为三步:
改变系统栏的颜色
设置全屏布局
处理视觉冲突
我们会跳过第一步,因为从去年至今这个部分没有改动。教程中的第二步和第三步有一些针对 Android 11 的改动,让我们来看一下。
#2: 设置全屏布局
在以往的第二步中,应用需要使用 systemUiVisibility API 以及一些参数来设置全屏布局:
view.systemUiVisibility =
// 通知系统,视窗希望在极端的情况下该如何布局内容。查看文档来获取更具体的信息。