本課程將說明如何在應用程式的不同版本 Android。隱藏狀態列 (及選用導覽列) 即可 會佔用更多顯示空間,從而提供更身歷其境的使用者體驗。
圖 1 顯示可見狀態列的應用程式:
圖 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()
方法是由
當視窗的內容插邊變更時為檢視區塊階層,讓視窗可以
並據此調整內容覆寫此方法即可處理
任意插播,因此應用程式的版面配置。