Android Compose - 如何使图片显示在状态栏下方?

6
我刚开始学习Jetpack Compose。我的应用程序有许多屏幕,它显示具有颜色的StatusBar,该颜色在主题中定义,但是在某些屏幕上,我想使StatusBar颜色透明并且图像显示在StatusBar下面。
请逐步指导我。
提前谢谢您。

你的问题是如何在状态栏下显示图片,还是如何动态将特定屏幕的状态栏颜色更改为透明? - Santanu Sur
要更改颜色,请检查以下链接:https://stackoverflow.com/questions/67579824/compose-custom-materialtheme-colors-not-working/67580759#67580759 - Gabriele Mariotti
3个回答

10
在setContent之前,只需编写此行。
  window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

这仅适用于某些设备,并且它还扩展了设备底部导航栏下面的背景,这不是问题的所在。 - galaxigirl

2

ActivityonCreate()中调用setContent{}之前,执行以下操作:

WindowCompat.setDecorFitsSystemWindows(window, false)

这个解决方案也被Jetcaster示例应用程序使用 https://github.com/android/compose-samples/blob/main/Jetcaster/app/src/main/java/com/example/jetcaster/ui/MainActivity.kt - promanowicz

2

首先,在你的res>主题中移除操作栏;

<style name="Theme.app_android" 
parent="Theme.MaterialComponents.Light.NoActionBar">

然后在MainActivity中调用您的可组合项,如下所示设置WindowCompat。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
     setContent {
     App()
    }
  }
}

然后使用ProvideWindowInsets函数来记住一个被称为系统UI控制器的对象,该对象被调用在一个SideEffect函数内,使系统状态栏变为透明。

@Composable
fun App() {
    AppTheme {
        ProvideWindowInsets {
        val systemUiController = rememberSystemUiController()

        SideEffect {
            systemUiController.setSystemBarsColor(Color.Transparent, 
            darkIcons = false)
        }

        val navController = rememberNavController()
        val coroutineScope = rememberCoroutineScope()
        val navBackStackEntry by 
        navController.currentBackStackEntryAsState()
        val currentRoute = navBackStackEntry?.destination?.route

        Scaffold() { innerPadding ->
            Box(modifier = Modifier.padding(innerPadding)) {
                NavGraph(navController = navController)
               }
            }
          }
        }
      }

如果您从此处克隆组合样本https://github.com/android/compose-samples,它们会向您展示实现它的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接