【问题标题】:How to implement transparent status bar in Jetpack Compose Android如何在 Jetpack Compose Android 中实现透明状态栏
【发布时间】:2022-11-14 18:05:09
【问题描述】:

我想在 jetpack compose 中实现透明状态栏。

我为此集成了 Accompanist 库,但它对状态栏没有透明影响。

implementation "com.google.accompanist:accompanist-systemuicontroller:0.18.0"

// Remember a SystemUiController
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()

DisposableEffect(systemUiController, useDarkIcons) {
    // Update all of the system bar colors to be transparent, and use
    // dark icons if we're in light theme
    systemUiController.setStatusBarColor(
        color = Color.Transparent,
        darkIcons = useDarkIcons
    )

    // setStatusBarColor() and setNavigationBarColor() also exist

    onDispose {}
}

也试过了,但是手势导航有问题

val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
  val window = (view.context as Activity).window
  val insets = WindowCompat.getInsetsController(window, view)
  window.statusBarColor = Color.Transparent.toArgb() // choose a status bar color
  window.navigationBarColor = Color.Transparent.toArgb() // choose a navigation bar color
  insets.isAppearanceLightStatusBars = !useDarkTheme
  insets.isAppearanceLightNavigationBars = !useDarkTheme
 }
}

请为透明状态栏提出更好的解决方案。

【问题讨论】:

  • 你申请WindowCompat.setDecorFitsSystemWindows(window, false)了吗?
  • 是的,这会对手势导航产生影响,这就是为什么不想采用这种方法的原因。
  • 能发个画面吗?

标签: android android-jetpack-compose android-statusbar jetpack-compose-accompanist


【解决方案1】:

尝试这个

将以下行添加到您的主题

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

将此行添加到主题后,在要设置透明状态栏的活动中设置此主题

您希望拥有透明状态栏的活动/容器布局需要此属性集:

android:fitsSystemWindows="true"

添加活动根布局

【讨论】:

  • 另外,检查this
  • 我想用 Jetpack compose 来实现这个。
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
相关资源
最近更新 更多