[英]Programmatically Change Status Bar Text Color in Android 11 (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.