簡體   English   中英

Android R:API 30:系統欄可見性更改回調

[英]Android R : API 30 : System bar visibility change call backs

我正在嘗試使我的應用程序成為全屏應用程序。 在 Api 級別 29 及以下,我使用onSystemUIVisibilityChange偵聽器在應用程序全屏時處理我的活動中某些視圖的可見性。 但是在 api 級別 30 上,是否有類似的回調來了解系統欄(狀態欄和導航欄)的可見性何時發生變化? 由於 API 級別 29 及更高版本不推薦使用onSystemUIVisibilityChange

我知道activity.window.insetsController.show(WindowInsets.Type.systemBars())來顯示和隱藏系統欄。 我需要的是系統欄可見性改變時的回調。

正如文檔中所述,您可以使用設置偵聽器
View.OnApplyWindowInsetsListener((view: View, window:WindowInsets) -> WindowInsets)
然后在偵聽器中,您可以使用WindowInsets.isVisible(Int)檢查系統欄是否可見。 像這樣:

private val onWindowInsetApplied: (view: View, window:WindowInsets) -> WindowInsets = { view, windowInsets ->
    val areSystemBarsVisible = windowInsets.isVisible(WindowInsets.Type.systemBars())
    //Do something
    windowInsets
}

fun setListener() {
    View.OnApplyWindowInsetsListener(onWindowInsetApplied)
}

對於 Java 開發人員,這是@ Kyzer Soze答案的java版本

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {

    decorView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
        @Override
        public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

            if (insets.isVisible(WindowInsets.Type.systemBars())) {
                Toast.makeText(MainActivity.this, "system bars are Visible",    
                                                       Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "system bars are Invisible", 
                                                       Toast.LENGTH_SHORT).show();
            }

            return insets;
        }
    });

}

確保不要在 API-30 以下調用setOnApplyWindowInsetsListener ,因為它會引發運行時異常

暫無
暫無

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

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