隱藏狀態列

本課程將說明如何在應用程式的不同版本 Android。隱藏狀態列 (及選用導覽列) 即可 會佔用更多顯示空間,從而提供更身歷其境的使用者體驗。

圖 1 顯示可見狀態列的應用程式:

系統資訊列

圖 1. 顯示狀態列。

圖 2 顯示隱藏狀態列的應用程式。請注意,動作列也會隱藏。 請勿在沒有狀態列的情況下顯示動作列。

系統資訊列

圖 2. 隱藏狀態列。

在 Android 4.0 以下版本中隱藏狀態列

您可以在 Android 4.0 (API 級別 14) 以下版本的裝置上隱藏狀態列,方法是設定 WindowManager 標記。您可以透過程式輔助或 請在應用程式的資訊清單檔案中設定活動主題。在應用程式的 如果狀態列必須始終保持開啟狀態,則建議採用資訊清單檔案 (不過嚴格說來,您可以透過程式輔助方式覆寫 第一個主題)。例如:

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

使用活動主題的優點如下:

  • 與透過程式輔助方式設定標記相比,維護容易且較不容易出錯。
  • 這麼做可以提供更順暢的 UI 轉換體驗,因為系統能取得所需資訊 ,在將應用程式的主要活動執行個體化之前,先算繪 UI。

您也可以透過程式輔助方式設定 WindowManager 旗標。 這種做法可讓你在使用者與互動時,輕鬆隱藏及顯示狀態列 應用程式:

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
        setContentView(R.layout.activity_main)
    }
    ...
}

Java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}

設定 WindowManager 旗標時 (無論是透過活動主題 程式輔助傳送) 的旗標,除非應用程式將其清除,否則標記會保持有效。

別擔心!您可以使用 FLAG_LAYOUT_IN_SCREEN 將活動版面配置設為使用啟用後可用的畫面區域 FLAG_FULLSCREEN。這麼做可避免 隱藏及顯示內容。

在 Android 4.1 以上版本中隱藏狀態列

您可以在 Android 4.1 (API 級別 16) 以上版本中隱藏狀態列,方法是: 使用 setSystemUiVisibility()setSystemUiVisibility() 會在 個別檢視層級都會匯總到整個視窗層級使用 setSystemUiVisibility():用來設定 UI 標記 能讓您更精細地控制系統資訊列 WindowManager 旗標。這段程式碼會隱藏狀態列:

Kotlin

// Hide the status bar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
actionBar?.hide()

Java

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

注意事項:

  • 清除使用者介面標記後 (例如,前往 活動),您必須重設應用程式,才能再次隱藏長條。 請參閱回應 UI 瀏覽權限變更一文 討論如何監聽 UI 瀏覽權限變更,讓應用程式能夠 做出相應回應
  • UI 旗標的設定位置會有所不同。如果您在活動 onCreate() 方法和使用者按下主畫面按鈕後,系統資訊列會 再次顯示。使用者重新開啟活動時,onCreate() 因此系統不會呼叫系統資訊列,因此系統資訊列仍會顯示在畫面上。如果您希望系統 UI 變更 在使用者瀏覽及退出活動時保持不變;請在 onResume()onWindowFocusChanged()
  • setSystemUiVisibility() 方法 只有在您呼叫它的檢視區塊可見時才會生效。
  • 離開檢視畫面會造成標記 使用 setSystemUiVisibility() 設定 。

讓內容顯示在狀態列後方

在 Android 4.1 以上版本中,您可以將應用程式內容設為 這樣當狀態列隱藏及顯示內容時,就不會調整內容大小。 方法是使用 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。 您可能還需要使用 SYSTEM_UI_FLAG_LAYOUT_STABLE,協助您的應用程式維持 穩定的版面配置。

使用這個方法時,您有責任確保 應用程式的使用者介面 (例如 Google 地圖應用程式中的內建控制項) 並未提供 可能會被系統資訊列覆蓋這可能會導致應用程式無法使用。在大部分的情況下, 處理這種情況,方法是將 android:fitsSystemWindows 屬性新增至 XML 版面配置檔案,並設為 true。這麼做會調整父項 ViewGroup 的邊框間距 為系統視窗預留空間對大多數應用程式來說,這已足夠使用完畢。

但在某些情況下,您可能需要修改預設邊框間距,才能取得所需的 設定應用程式的版面配置如要直接操控 版面配置相對於系統資訊列 (佔據視窗的 「內容插邊」),覆寫 fitSystemWindows(Rect insets)fitSystemWindows() 方法是由 當視窗的內容插邊變更時為檢視區塊階層,讓視窗可以 並據此調整內容覆寫此方法即可處理 任意插播,因此應用程式的版面配置。