Android Compose -如何在Statusbar下显示图像?

zqry0prt  于 2024-01-04  发布在  Android
关注(0)|答案(4)|浏览(99)

我刚开始使用Jetpack Compose。我的应用程序有很多屏幕,它显示带有颜色的StatusBar,这是在主题中定义的,但在某些屏幕上,我想让StatusBar颜色透明,图像显示在StatusBar下。
请一步一步地指导我。
先谢谢你了。

klsxnrf1

klsxnrf11#

WindowCompat.setDecorFitsSystemWindows(window, false)添加到Activity onCreate

override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        WindowCompat.setDecorFitsSystemWindows(window, false)
        ...
}

字符串
然后在Scaffold中添加WindowInsets.navigationBars,以防止底部部分与导航栏重叠

Scaffold(
    contentWindowInsets = WindowInsets.navigationBars
)

afdcj2ne

afdcj2ne2#

只需在setContent之前写入这一行

window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

字符串

kmb7vmvb

kmb7vmvb3#

首先在你的res >主题中删除动作栏;

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

字符串
然后在MainActivity中调用您的composable,设置WindowCompat before,如下所示

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
     setContent {
     App()
    }
  }
}


然后使用ProvideWindowInsets函数记住在SideEffect函数中调用的systemUiController,该函数将系统状态栏设置为透明

@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,他们会告诉你如何实现它。

gxwragnw

gxwragnw4#

ActivityonCreate()上的setContent{}之前执行以下操作:

WindowCompat.setDecorFitsSystemWindows(window, false)

字符串

相关问题