Android状态栏和导航栏非沉浸式实现方法
Android状态栏和导航栏非沉浸式实现方法 在Android应用开发中,特别是使用Jetpack Compose时,实现非沉浸式状态栏和导航栏(即保持它们的颜色与应用内容分离)需要一些特定的技术。本文档总结了在Jetpack Compose应用中实现黑色非沉浸式状态栏和导航栏的方法。 实现方法 1. 禁用默认的沉浸式行为 首先,需要禁用Android默认的沉浸式行为,这可以通过WindowCompat.setDecorFitsSystemWindows方法实现: 1 2 // 禁用沉浸式状态栏 WindowCompat.setDecorFitsSystemWindows(window, true) 这告诉系统窗口装饰(状态栏和导航栏)应该被考虑在内,内容不应该延伸到这些区域下方。 2. 控制状态栏和导航栏外观 在现代Android开发中,推荐使用WindowInsetsController来控制状态栏和导航栏的外观,而不是直接设置颜色: 1 2 3 4 5 6 // 获取窗口控制器 val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) // 设置为深色模式(深色背景,浅色图标) windowInsetsController.isAppearanceLightStatusBars = false windowInsetsController.isAppearanceLightNavigationBars = false isAppearanceLightStatusBars = false和isAppearanceLightNavigationBars = false表示状态栏和导航栏使用深色背景,因此系统会使用浅色(白色)图标来确保可见性。 注意:旧的方式 window.statusBarColor 和 window.navigationBarColor 已被弃用,不推荐使用。 3. 使用分层布局处理内容区域 为了确保内容不会被状态栏和导航栏遮盖,可以使用Compose的Box布局创建分层UI: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 使用Box布局,底层是黑色背景 Box( modifier = Modifier ....