返回

如何实现显示屏开口边缘到边缘的可组合组件界面?

Android

边缘到边缘可组合组件与显示屏开口

简介

在 Android 应用程序中创建边缘到边缘用户体验已变得越来越重要,尤其是在拥有显示屏开口的设备上。本篇文章将探讨如何解决在显示屏开口的情况下,为可组合组件渲染边缘到边缘界面的挑战。

问题:系统栏隐藏后的空间限制

使用现代 Android 开发工具(如 Jetpack Compose)构建边缘到边缘界面通常不成问题。但是,当设备具有显示屏开口时,情况会变得更加复杂。

在没有显示屏开口的情况下,隐藏系统栏(状态栏和导航栏)会为应用程序提供额外的垂直空间,使可组合组件可以扩展到屏幕的顶部和底部边缘。然而,在有显示屏开口的情况下,隐藏系统栏并不会为可组合组件提供此额外空间。

解决方案:调整窗口行为

为了解决这个问题,我们需要调整窗口的行为,使它不适应系统栏。这可以通过设置 WindowCompat.setDecorFitsSystemWindowsfalse 来实现。此操作将指示窗口不再考虑系统栏,而是将其视为可绘制区域的一部分。

WindowCompat.setDecorFitsSystemWindows(window, false)

隐藏系统栏

接下来,我们需要隐藏系统栏以释放应用程序的全部屏幕空间。可以使用 WindowCompat.getInsetsController 来实现此目的。

val insetsController = WindowCompat.getInsetsController(window, window.decorView)
insetsController.hide(WindowInsetsCompat.Type.systemBars())

调整内边距

隐藏系统栏后,我们可能会发现可组合组件周围有额外的内边距。这是因为窗口现在扩展到整个屏幕,包括系统栏区域。为了解决这个问题,我们需要调整可组合组件的内边距,以补偿消失的系统栏空间。

演示应用程序

为了演示此解决方案,我们创建了一个简单的应用程序,它沿着画布边缘绘制一条红线,以填充屏幕上的可用空间。

结果

通过实施上述步骤,我们能够在有和没有显示屏开口的情况下,在应用程序中实现边缘到边缘的可组合组件。红色边框现在将环绕屏幕的整个可绘制区域,包括显示屏开口周围的区域。

常见问题解答

  • 此解决方案是否适用于所有 Android 版本?

此解决方案适用于 Android 13 及更高版本。

  • 此解决方案是否支持所有显示屏尺寸和形状?

此解决方案支持所有显示屏尺寸和形状,包括圆角显示屏和带有多个显示屏开口的折叠设备。

  • 此解决方案是否影响其他应用程序的系统栏行为?

不,此解决方案只影响当前应用程序的窗口行为。

  • 此解决方案是否提高了应用程序的性能?

此解决方案可能对应用程序的性能产生轻微影响,因为窗口现在必须考虑更大的可绘制区域。但是,这种影响对于大多数应用程序来说应该是可以忽略的。

  • 如何调试边缘到边缘的可组合组件问题?

您可以使用 ViewTreeObserver 来监视窗口大小和内边距的变化。您还可以使用 WindowInsetsCompat 来检查系统栏和显示屏开口的位置。

结论

通过调整窗口行为和隐藏系统栏,我们能够在显示屏开口的情况下为可组合组件实现边缘到边缘的界面。这为创建沉浸式且现代化的 Android 应用程序铺平了道路。