1、Settings的主界面的實現:
Settings采用了PreferenceActivity和PreferenceFragment結合的實現方式。
Settings.java繼承自PreferenceActivity,是Settings的主界面,它通過loadHeadersFromResource函數(api level 11)加載res/xml/settings_headers.xml來構造界面。在settings_headers.xml中聲明了要在Settings主界面顯示的各個header(如Sound、Display等)Settings.HeaderAdapter將其中的header分為三類。在Settings.HeaderAdapter中的getView方法中根據header的類型使用不同的布局文件。
為header划分類型的函數
static int getHeaderType(Header header) {
if (header.fragment == null && header.intent == null) {
return HEADER_TYPE_CATEGORY; // 因為沒有指明fragment和intent
} else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings || header.id == R.id.mobiledata_settings) {
return HEADER_TYPE_SWITCH; // 針對特定的三個header,分別為Wi-Fi、Bluetooth和Mobile data
} else {
return HEADER_TYPE_NORMAL;
}
}
當我們點擊主界面的header后會顯示與該header相關的設置界面。大部分(如Display的詳細設置界面)都是通過繼承PreferenceFragment來實現的;有一部分是在settings_headers.xml中聲明<intent>,當被點擊時(觸發PreferenceActivity的onHeaderClick())將會通過startActivity來啟動在<intent>節點中聲明的targetClass(如設置中的Add account)。
2、通過res/xml/settings_headers.xml分析android4.3里設置的構成
無線和網絡
Wifi:com.android.settings.wifi.WifiSettings
MobileData:com.android.phone.MSimMobileNetworkSubSettings phone里的寫的
Bluetooth:com.android.settings.bluetooth.BluetoothSettings
Data Usage(流量使用情況):com.android.settings.DataUsageSummary
Operator hook(運營商):com.android.settings.WirelessSettings(NFC nfc beam 具體不清楚)
Other wireless and network controls(更多):com.android.settings.WirelessSettings
設備
Multi Sim Settings(多SIM卡設置):com.android.settings.MultiSimSettings被注釋掉了
Multi Sim Settings(雙卡設置):com.android.settings.multisimsettings.MultiSimSettings
Global roaming settings(國際漫游設置)if RoamingSettings installed(如果安裝了漫游設置):android:action="com.android.action.roamingsettings"
Sound:com.android.settings.SoundSettings
Display:com.android.settings.DisplaySettings
Storage:com.android.settings.deviceinfo.Memory
Battery:com.android.settings.fuelgauge.PowerUsageSummary
Application Settings(應用):com.android.settings.ApplicationSettings
Manage users(用戶):com.android.settings.users.UserSettings
Manufacturer hook(制造商):com.android.settings.WirelessSettings
PERSONAL(個人)
Location(位置信息使用權限):com.android.settings.LocationSettings
Security(安全):com.android.settings.SecuritySettings
Language:com.android.settings.inputmethod.InputMethodAndLanguageSettings
Backup and reset(備份和重置):com.android.settings.PrivacySettings
ACCOUNTS section(賬戶)
add account(添加賬戶):android.settings.ADD_ACCOUNT_SETTINGS
SYSTEM(系統)
Date & Time:com.android.settings.DateTimeSettings
Accessibility feedback(輔助功能):com.android.settings.AccessibilitySettings
Development(開發者選項):com.android.settings.DevelopmentSettings
About Device(關於手機):com.android.settings.DeviceInfoSettings