簡體   English   中英

SystemUIController 不會設置狀態欄顏色 - Jetpack Compose Accompanist

[英]SystemUIController won't set status bar color - Jetpack Compose Accompanist

我不確定我何時更改或更改了什么,但突然之間 systemUiController 已停止影響我的應用程序中的狀態欄顏色。 對於上下文,我將伴奏 Insets 庫與系統 UI controller 結合使用,以擺脫狀態和導航欄,這在構建或兩個之前工作正常,現在它只在導航/手勢欄上工作.

為此,我將所有可組合項放入 ProvideWindowInsets,並將條形 colors 設置為透明。 由於某種原因,這只適用於導航欄。

為了調試,除了 mainActivity 的 onCreate 中的 setContent 之外,我已經刪除了我的應用程序中的所有內容,包括所有服務,並暫時刪除了 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 和伴奏 0.24.9-beta,盡管我在調試時嘗試了許多不同的版本,但都沒有工作。 我什至創建了一個新的測試應用程序項目並粘貼了來自伴奏 github 的 Insets + SystemUIController 示例應用程序,即使這樣也沒有用。

請幫我。 謝謝。

那是因為在 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庫來更新系統欄

. 您可以直接在 Material3 Compose 模板中使用 Theme.kt 中的上述代碼。

注意: ViewCompat.getWindowInsetsController(view)現已棄用。 您應該使用WindowCompat.getInsetsController(window, view)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM