模式和組件

在 Android 8.0 中,“設置”菜單獲得了幾個涵蓋常見用途的組件和小部件。鼓勵設備製造商和開發人員在擴展設置應用程序時使用通用組件,以便新的用戶界面與現有的設置 UI 保持一致。

以下是改進的摘要:

  • 支持庫首選項框架中的分隔符行為更改。現在在類別之間繪製分隔線。
  • ActionBar 主題更改。 ActionBar 現在使用淺色主題和強調色文本。
  • 新的偏好佈局。即使首選項沒有圖標,圖標的空間也會保留。

新小部件:

  • 應用程序詳細信息的標題小部件。顯示應用圖標、應用標籤等信息。
  • 某些頁面上的展開按鈕。頁面可以以折疊狀態開始並隱藏不太重要的項目,直到用戶單擊展開按鈕。
  • 默認應用選擇器 UI:
    • 用於選擇默認瀏覽器、默認手機應用等的 UI。
    • 以前是一個對話框,現在它是一個基於單選按鈕的全屏 UI。
  • “MasterSwitch”風格偏好。這是具有兩個點擊目標的首選項。左目標導致子集片段或意圖。右目標是一個開關切換,控制整個頁面的開/關。

示例和來源

  • 分頻器行為
    • 設置中的所有頁面都被修改為使用新的分隔符行為。
    • 分隔線行為被定義為 ThemeOverlay :
      packages/apps/Settings/res/values/styles_preference.xml
  • ActionBar 主題更改
    • 設置中的所有頁面都被修改為使用新的 ActionBar 主題。
    • 主題在 Theme.DeviceDefault.Settings 中定義
  • 新的首選項佈局
    • 設置中的許多頁面現在都在使用新的首選項佈局。
    • 您可以在以下位置找到代碼:
      packages/apps/Settings/res/values/styles_preference.xml
  • 應用標題小部件
    • 設置中的大多數應用程序信息頁面已經實現了新的應用程序標頭。
    • 示例和代碼可以在以下位置找到:
      packages/apps/Settings/src/com/android/settings/applications/AppHeaderController.java
  • 展開按鈕
    • 示例和代碼可以在以下位置找到:
      packages/apps/Settings/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java

      注意:該組件必須與 DashboardFragment 一起使用。 (請參閱更新的信息架構中有關 DashboardFragment 的更多詳細信息。)

  • 默認應用選擇器
    • 您可以在以下位置找到基類的代碼:
      packages/apps/Settings/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
    • DefaultAppPickerFragment 有幾個子類,每個子類都為不同的意圖實現一個選擇器。
  • MasterSwitch風格偏好
    • 代碼位於: packages/apps/Settings/src/com/android/settings/widget/MasterSwitchPreference.java
    • 一個示例用例是 Wi-Fi 主交換機。您可以在以下位置找到示例: packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java

執行

設備製造商可以開始使用所有開箱即用的新組件。如果 OEM 決定實施新的“MasterSwitch”樣式首選項或默認應用程序選擇器,他們應遵循本文檔中的示例以及隨每個組件編寫的參考文件 (Javadoc) 以了解更多詳細信息。

定制

  • 分頻器行為。要更改分隔線的繪製方式,請更新設置分隔線的樣式並更改以下值:
    • 允許DividerAbove
    • allowDividerBelow
    • allowDividerAfterLastItem
  • ActionBar 主題顏色。活動應該使用Theme.DeviceDefault.Settings作為他們的主題,或者使用Theme.DeviceDefault.Settings作為父創建自定義主題。
  • 應用標題小部件。使用 AppHeaderController 中的設置器自定義每個字段,並在設置所有字段後調用 build()。
  • 展開按鈕:
    • 要完全禁用該功能,請覆蓋 ProgressiveDisclosureMixin 的構造函數並將 keepExpanded 設置為 true。
    • 要自定義最初顯示的項目數,請在片段的onAttach(Context)方法期間調用ProgressiveDisclosureMixin.setTileLimit()方法。