在 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()
方法。