Jetpack Compose - 使 StatusBar 透明并隐藏其内容

问题描述 投票:0回答:1

我使用

enableEdgeToEdge
在透明状态栏下显示内容。这是相同的代码片段:

override fun onCreate(savedInstanceState: Bundle?) {
    enableEdgeToEdge()
    super.onCreate(savedInstanceState)

    setContent {
        SampleApplicationTheme {
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colorScheme.background
            ) {
                Image(
                    painter = rememberAsyncImagePainter("https://picsum.photos/seed/1234/700/2000"),
                    contentDescription = "Bucket Photo",
                )
            }
        }
    }
}

这就是屏幕上的样子

当我尝试使用

insetsController.hide(WindowInsetsCompat.Type.statusBars())
隐藏状态栏的内容时,它完全隐藏状态栏并垂直移动其下方的内容,如下所示:

有没有办法隐藏状态栏的内容(而不是完全隐藏状态栏),以便我可以利用整个屏幕来显示我的内容?

android kotlin android-jetpack-compose android-jetpack
1个回答
0
投票

Chirag Thummar评论重点关注使应用程序全屏并确保隐藏状态栏的内容,从而有效地允许应用程序的内容利用整个屏幕,包括状态栏后面的区域。

首先,更新

themes.xml
中的应用程序主题以扩展
NoActionBar
主题并添加标志以隐藏状态栏的内容。如果您的应用程序面向 Android API 级别 30 (Android 11) 或更高版本,您可以直接操纵主题中系统栏的外观。请参阅 Shawn Gomez 的“将 Android Studio 的
NoActionBar
主题更改为 ActionBar:指南
”作为示例。
还有“
NoActionBar
配置仍然在 Android 上显示操作栏

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- Use this for Android 11 (API level 30) and above -->
    <item name="android:windowFullscreen">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
</style>

在您的

Activity
中,应用其他配置以使您的应用程序全屏显示并隐藏状态栏图标。该步骤对于 11 以下的 Android 版本(API 级别 30)非常重要。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    WindowCompat.setDecorFitsSystemWindows(window, false)
    val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
    windowInsetsController.hide(WindowInsetsCompat.Type.statusBars()) // Hide status bar icons
    windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

    setContent {
        SampleApplicationTheme {
            // Your Compose content
        }
    }
}

它的用途:

  • WindowCompat.setDecorFitsSystemWindows(window, false)
    确保您的应用程序的内容可以扩展到窗口插入区域,使应用程序真正全屏。
  • windowInsetsController.hide(WindowInsetsCompat.Type.statusBars())
    隐藏状态栏的内容。请注意,此方法可能不会在所有版本的 Android 上隐藏状态栏的背景,但它将确保图标和通知不可见,从而提供更身临其境的体验。
  • windowInsetsController.systemBarsBehavior
    是可选的,允许当用户从屏幕边缘滑动时暂时显示系统栏。它允许在全屏应用程序中轻松访问系统栏,从而增强了用户体验。
© www.soinside.com 2019 - 2024. All rights reserved.