在沈浸模式下隱藏系統資訊列
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
部分內容適合以全螢幕模式觀看,且狀態列或導覽列上不顯示任何指標。例如影片、遊戲、圖片庫、書籍和簡報投影片。這稱為「沉浸模式」。本頁說明如何透過全螢幕內容,進一步吸引使用者。
圖 1. 沉浸模式示例。
沉浸模式可避免使用者在遊戲期間意外退出,並提供沉浸式體驗,讓使用者盡情欣賞圖片、影片和書籍。不過,請留意使用者進出應用程式查看通知、進行臨時搜尋或執行其他動作的頻率。由於沉浸模式會導致使用者無法輕鬆存取系統導覽功能,因此只有在沉浸模式能帶來的好處不只是使用額外螢幕空間時,才建議使用。
使用 WindowInsetsControllerCompat.hide()
隱藏系統資訊列,並使用 WindowInsetsControllerCompat.show()
顯示系統資訊列。
以下程式碼片段範例說明如何設定按鈕,以隱藏及顯示系統資訊列。
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
...
val windowInsetsController =
WindowCompat.getInsetsController(window, window.decorView)
// Configure the behavior of the hidden system bars.
windowInsetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
// Add a listener to update the behavior of the toggle fullscreen button when
// the system bars are hidden or revealed.
ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets ->
// You can hide the caption bar even when the other system bars are visible.
// To account for this, explicitly check the visibility of navigationBars()
// and statusBars() rather than checking the visibility of systemBars().
if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
|| windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
binding.toggleFullscreenButton.setOnClickListener {
// Hide both the status bar and the navigation bar.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
}
} else {
binding.toggleFullscreenButton.setOnClickListener {
// Show both the status bar and the navigation bar.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
}
}
ViewCompat.onApplyWindowInsets(view, windowInsets)
}
}
Java
@Override
protected void onCreate(Bundle savedInstanceState) {
...
WindowInsetsControllerCompat windowInsetsController =
WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
// Configure the behavior of the hidden system bars.
windowInsetsController.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
);
// Add a listener to update the behavior of the toggle fullscreen button when
// the system bars are hidden or revealed.
ViewCompat.setOnApplyWindowInsetsListener(
getWindow().getDecorView(),
(view, windowInsets) -> {
// You can hide the caption bar even when the other system bars are visible.
// To account for this, explicitly check the visibility of navigationBars()
// and statusBars() rather than checking the visibility of systemBars().
if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
|| windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
binding.toggleFullscreenButton.setOnClickListener(v -> {
// Hide both the status bar and the navigation bar.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
});
} else {
binding.toggleFullscreenButton.setOnClickListener(v -> {
// Show both the status bar and the navigation bar.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
});
}
return ViewCompat.onApplyWindowInsets(view, windowInsets);
});
}
您可以選擇指定要隱藏的系統資訊列類型,並決定使用者與系統資訊列互動時的行為。
指定要隱藏的系統資訊列
如要指定要隱藏的系統資訊列類型,請將下列其中一個參數傳遞至 WindowInsetsControllerCompat.hide()
。
指定隱藏系統資訊列的行為
使用 WindowInsetsControllerCompat.setSystemBarsBehavior()
指定使用者與隱藏的系統資訊列互動時的行為。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-08-27 (世界標準時間)。
[null,null,["上次更新時間:2025-08-27 (世界標準時間)。"],[],[],null,["Some content is best experienced in fullscreen without any indicators on the\nstatus bar or the navigation bar. Some examples are videos, games, image\ngalleries, books, and presentation slides. This is referred to as\n*immersive mode*. This page shows how you can engage users more deeply with\ncontent in fullscreen. \n**Figure 1.** Example of immersive mode.\n\nImmersive mode helps users avoid accidental exits during a game and\ndelivers an immersive experience for enjoying images, videos, and books.\nHowever, be mindful of how often users jump in and out of apps to check notifications,\nto conduct impromptu searches, or to take other actions. Because immersive mode\ncauses users to lose easy access to system navigation, use immersive mode only\nwhen the benefit to the user experience goes beyond simply using extra screen\nspace.\n\nUse [`WindowInsetsControllerCompat.hide()`](/reference/androidx/core/view/WindowInsetsControllerCompat#hide(int))\nto hide the system bars and [`WindowInsetsControllerCompat.show()`](/reference/androidx/core/view/WindowInsetsControllerCompat#show(int))\nto bring them back.\n\nThe following snippet shows an example of configuring a button to hide and show\nthe system bars. \n\nKotlin \n\n```kotlin\noverride fun onCreate(savedInstanceState: Bundle?) {\n ...\n\n val windowInsetsController =\n WindowCompat.getInsetsController(window, window.decorView)\n // Configure the behavior of the hidden system bars.\n windowInsetsController.systemBarsBehavior =\n WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE\n\n // Add a listener to update the behavior of the toggle fullscreen button when\n // the system bars are hidden or revealed.\n ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets -\u003e\n // You can hide the caption bar even when the other system bars are visible.\n // To account for this, explicitly check the visibility of navigationBars()\n // and statusBars() rather than checking the visibility of systemBars().\n if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())\n || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {\n binding.toggleFullscreenButton.setOnClickListener {\n // Hide both the status bar and the navigation bar.\n windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())\n }\n } else {\n binding.toggleFullscreenButton.setOnClickListener {\n // Show both the status bar and the navigation bar.\n windowInsetsController.show(WindowInsetsCompat.Type.systemBars())\n }\n }\n ViewCompat.onApplyWindowInsets(view, windowInsets)\n }\n}\n```\n\nJava \n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n ...\n\n WindowInsetsControllerCompat windowInsetsController =\n WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());\n // Configure the behavior of the hidden system bars.\n windowInsetsController.setSystemBarsBehavior(\n WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE\n );\n\n // Add a listener to update the behavior of the toggle fullscreen button when\n // the system bars are hidden or revealed.\n ViewCompat.setOnApplyWindowInsetsListener(\n getWindow().getDecorView(),\n (view, windowInsets) -\u003e {\n // You can hide the caption bar even when the other system bars are visible.\n // To account for this, explicitly check the visibility of navigationBars()\n // and statusBars() rather than checking the visibility of systemBars().\n if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())\n || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {\n binding.toggleFullscreenButton.setOnClickListener(v -\u003e {\n // Hide both the status bar and the navigation bar.\n windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());\n });\n } else {\n binding.toggleFullscreenButton.setOnClickListener(v -\u003e {\n // Show both the status bar and the navigation bar.\n windowInsetsController.show(WindowInsetsCompat.Type.systemBars());\n });\n }\n return ViewCompat.onApplyWindowInsets(view, windowInsets);\n });\n}\n```\n\nOptionally, you can specify the type of system bars to hide and determine\ntheir behavior when a user interacts with them.\n\nSpecify which system bars to hide\n\nTo specify the type of system bars to hide, pass one of the following parameters\nto `WindowInsetsControllerCompat.hide()`.\n\n- Use [`WindowInsetsCompat.Type.systemBars()`](/reference/kotlin/androidx/core/view/WindowInsetsCompat.Type#systembars) to\n hide both system bars.\n\n- Use [`WindowInsetsCompat.Type.statusBars()`](/reference/kotlin/androidx/core/view/WindowInsetsCompat.Type#statusbars) to\n hide only the status bar.\n\n- Use [`WindowInsetsCompat.Type.navigationBars()`](/reference/kotlin/androidx/core/view/WindowInsetsCompat.Type#navigationbars) to\n hide only the navigation bar.\n\nSpecify behavior of hidden system bars\n\nUse [`WindowInsetsControllerCompat.setSystemBarsBehavior()`](/reference/androidx/core/view/WindowInsetsControllerCompat#setSystemBarsBehavior(int))\nto specify how hidden system bars behave when the user interacts with them.\n\n- Use [`WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH`](/reference/androidx/core/view/WindowInsetsControllerCompat#BEHAVIOR_SHOW_BARS_BY_TOUCH())\n to reveal hidden system bars on *any* user interactions on the corresponding\n display.\n\n- Use [`WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE`](/reference/androidx/core/view/WindowInsetsControllerCompat#BEHAVIOR_SHOW_BARS_BY_SWIPE())\n to reveal hidden system bars on any system gestures, such as swiping from\n the edge of the screen where the bar is hidden from.\n\n- Use [`WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE`](/reference/androidx/core/view/WindowInsetsControllerCompat#BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE())\n to temporarily reveal hidden system bars with system gestures, such as\n swiping from the edge of the screen where the bar is hidden from. These\n transient system bars overlay your app's content, might have some degree of\n transparency, and are automatically hidden after a short timeout."]]