我刚开始使用Jetpack Compose。我的应用程序有很多屏幕,它显示带有颜色的StatusBar,这是在主题中定义的,但在某些屏幕上,我想让StatusBar颜色透明,图像显示在StatusBar下。请一步一步地指导我。先谢谢你了。
klsxnrf11#
将WindowCompat.setDecorFitsSystemWindows(window, false)添加到Activity onCreate中
WindowCompat.setDecorFitsSystemWindows(window, false)
onCreate
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) ... }
字符串然后在Scaffold中添加WindowInsets.navigationBars,以防止底部部分与导航栏重叠
Scaffold
WindowInsets.navigationBars
Scaffold( contentWindowInsets = WindowInsets.navigationBars )
型
afdcj2ne2#
只需在setContent之前写入这一行
window.setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS )
字符串
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,他们会告诉你如何实现它。
gxwragnw4#
在ActivityonCreate()上的setContent{}之前执行以下操作:
Activity
onCreate()
setContent{}
4条答案
按热度按时间klsxnrf11#
将
WindowCompat.setDecorFitsSystemWindows(window, false)
添加到ActivityonCreate
中字符串
然后在
Scaffold
中添加WindowInsets.navigationBars
,以防止底部部分与导航栏重叠型
afdcj2ne2#
只需在setContent之前写入这一行
字符串
kmb7vmvb3#
首先在你的res >主题中删除动作栏;
字符串
然后在MainActivity中调用您的composable,设置WindowCompat before,如下所示
型
然后使用ProvideWindowInsets函数记住在SideEffect函数中调用的systemUiController,该函数将系统状态栏设置为透明
型
如果你从这里克隆合成样本https://github.com/android/compose-samples,他们会告诉你如何实现它。
gxwragnw4#
在
Activity
onCreate()
上的setContent{}
之前执行以下操作:字符串