我正在尝试从我的应用程序中删除状态栏。
我查了几个帖子,很多人都推荐这个:
val systemUiController = rememberSystemUiController()
systemUiController.isStatusBarVisible = false // Status bar
systemUiController.isNavigationBarVisible = false // Navigation bar
systemUiController.isSystemBarsVisible = false // Status & Navigation bars
systemUiController.navigationBarDarkContentEnabled = falsee
在 Main 活动的 setContent 块内。 来自:com.google.accompanist:accompanist-systemuicontroller
上面代码的结果是一个黑色的状态栏。 我想要实现的是完全删除它并扩展可组合屏幕。
我得到了什么:
我想要什么:
我不想更改状态栏颜色,因为应用程序具有不同背景颜色的屏幕,并且我想要均匀的结果。 (相同的背景颜色,相同的状态栏颜色)
你知道这是否会发生吗?以及如何?
提前谢谢您!
为此,您需要将状态栏颜色设置为
Transparent
,然后将setDecorFitsSystemWindows
设置为false
,如何做到这一点?
有两种方法:
如果您在 themes.kt
文件中使用
material 3 compose,您应该有这个:
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
//set this to transparent
window.statusBarColor = Color.Transparent.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
}
}
如果您不使用材料 3,请转到您的
themes.xml
文件并更改此内容:
<?xml version="1.0" encoding="utf-8"?>
<style name="Theme.Test" parent="android:Theme.Material.Light.NoActionBar" >
<item name="android:windowTranslucentStatus">
false
</item>
<item name="android:statusBarColor">
@color/black
</item>
</style>
(您可能必须将透明颜色添加到您的colors.xml文件中)
执行以下两种方法之一后,您想要转到 MainActivity 并将其添加到 setContent 函数之前:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//add this line
WindowCompat.setDecorFitsSystemWindows(window,false)
setContent {
TestTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = Color.Green
) {
}
}
尝试将以下代码添加到应用程序基本主题的 theme.xml 中。
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>