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),