SystemUIController не устанавливает цвет строки состояния - Jetpack Compose Accompanist
Я не уверен, когда и что я изменил, но внезапно systemUiController перестал влиять на цвет строки состояния в моем приложении. Для контекста, я использую библиотеку Accompanist Insets в сочетании с системным контроллером пользовательского интерфейса, чтобы избавиться от состояния и панели навигации, и это работало нормально до одной или двух сборок назад, а теперь работает только на панели навигации/жестов. .
Я делаю это, помещая все компонуемые объекты в ProvideWindowInsets и устанавливая цвета полос на прозрачные. По какой-то причине это работает только на панели навигации.
Для отладки я удалил из своего приложения все, кроме setContent в onCreate mainActivity, включая все службы, и временно удалил все внутри setContent, кроме пустого провайдера темы.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()
SideEffect {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)
}
MicCheckTheme {
ProvideWindowInsets() {
}
}
}
}
Когда я запускаю это, прозрачна только панель навигации. Я считаю, что это не вина библиотеки Insets, поскольку, хотя строка состояния сохраняет свой цвет, содержимое приложения находится под панелью, поэтому Insets работает по назначению.
Для дальнейшего контекста я использую MainActivity, наследующую ComponentActivity с Material3, Compose 1.2.x и Accompanist 0.24.9-beta, хотя я пробовал много разных выпусков при отладке этого, ни один из них не работает. Я даже создал новый проект тестового приложения и вставил образец приложения Insets + SystemUIController из аккомпаниатора github, и даже это не сработало.
Помогите мне, пожалуйста! Спасибо.
2 ответа
Это связано с тем, что в Material3 compose Theme.kt переопределяет изменения systemuicontroller следующим образом:
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
(view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb()
ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
}
}
На самом деле вам не нужна библиотека systemuicontroller для обновления системных панелей.
. Вы можете напрямую использовать приведенный выше код из Theme.kt в шаблоне Material3 Compose.
Примечание. ViewCompat.getWindowInsetsController(view) теперь устарел. Вы должны использовать WindowCompat.getInsetsController(окно, вид)
это работает, вы можете установить window.statusBarColor как прозрачный, а isAppearanceLightStatusBars имеет значение !darkTheme. Это завершает процесс погружения. Вам нужно только установить DemoTheme (darkTheme),