日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android settings源代码分析(1)

發(fā)布時(shí)間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android settings源代码分析(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.Android?settings源碼的source code路徑為:

kikat_4.4_CTS\packages\apps\Settings

?

2.settings主界面UI布局

Settings的啟動(dòng)類為:

[java]?view plaincopy
  • /**?
  • ?*?Top-level?settings?activity?to?handle?single?pane?and?double?pane?UI?layout.?
  • ?*/??
  • public?class?Settings?extends?PreferenceActivity??
  • ????????implements?ButtonBarHandler,?OnAccountsUpdateListener??

  • 從繼承關(guān)系可以看出,Settings類繼承于PreferenceActivity,因此具有Preference的一些屬性和結(jié)構(gòu)。

    ?

    從Google? settings的UI看出,左邊是一些tab,右邊是tab對(duì)應(yīng)的內(nèi)容,那么這些tab以及tab對(duì)應(yīng)的內(nèi)容主要是什么,以及如何顯示的呢?

    ?

    對(duì)于tab的顯示,對(duì)應(yīng)的code為:

    [java]?view plaincopy
  • /**?
  • ????*?Populate?the?activity?with?the?top-level?headers.?
  • ????*/??
  • ???@Override??
  • ???public?void?onBuildHeaders(List<Header>?headers)?{??
  • ???????if?(!onIsHidingHeaders())?{??
  • ???????????loadHeadersFromResource(R.xml.settings_headers,?headers);??
  • ???????????updateHeaderList(headers);??
  • ???????}??
  • ???}??
  • 可以看出,左邊的tab實(shí)際是一些Header,從settings_headers.xml中獲取這些header。settings_header.xml對(duì)應(yīng)的code為:

    [html]?view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <!--?Copyright?(C)?2010?The?Android?Open?Source?Project??
  • ??
  • ?????Licensed?under?the?Apache?License,?Version?2.0?(the?"License");??
  • ?????you?may?not?use?this?file?except?in?compliance?with?the?License.??
  • ?????You?may?obtain?a?copy?of?the?License?at??
  • ??
  • ??????????http://www.apache.org/licenses/LICENSE-2.0??
  • ??
  • ?????Unless?required?by?applicable?law?or?agreed?to?in?writing,?software??
  • ?????distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,??
  • ?????WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.??
  • ?????See?the?License?for?the?specific?language?governing?permissions?and??
  • ?????limitations?under?the?License.??
  • -->??
  • ??
  • <preference-headers??
  • ????????xmlns:android="http://schemas.android.com/apk/res/android">??
  • ??
  • ??
  • ????<!--?WIRELESS?and?NETWORKS?-->??
  • ????<header?android:id="@+id/wireless_section"??
  • ????????android:title="@string/header_category_wireless_networks"?/>??
  • ??
  • ????<!--?Wifi?-->??
  • ????<!--?MStar?Android?Patch?Begin?-->??
  • ????<header??
  • ????????android:id="@+id/wifi_settings"??
  • ????????android:fragment="com.android.settings.wifi.TvWifiSettings"??
  • ????????android:title="@string/wifi_settings_title"??
  • ????????android:icon="@drawable/ic_settings_wireless"?/>??
  • ????<!--?MStar?Android?Patch?End?-->??
  • ??
  • ????<!--?Ethernet?-->??
  • ????<header??
  • ????????android:id="@+id/ethernet_settings"??
  • ????????android:fragment="com.android.settings.ethernet.EthernetSettings"??
  • ????????android:title="@string/ethernet_status_title"??
  • ????????android:icon="@drawable/ic_settings_ethernet"?/>??
  • ??
  • ????<!--?Bluetooth?-->??
  • ????<header??
  • ????????android:id="@+id/bluetooth_settings"??
  • ????????android:fragment="com.android.settings.bluetooth.TvBluetoothSettings"??
  • ????????android:title="@string/bluetooth_settings_title"??
  • ????????android:icon="@drawable/ic_settings_bluetooth2"?/>??
  • ??
  • ????<!--?Data?Usage?-->??
  • ????<header??
  • ????????android:id="@+id/data_usage_settings"??
  • ????????android:fragment="com.android.settings.DataUsageSummary"??
  • ????????android:title="@string/data_usage_summary_title"??
  • ????????android:icon="@drawable/ic_settings_data_usage"?/>??
  • ??
  • ????<!--?Operator?hook?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.WirelessSettings"??
  • ????????android:id="@+id/operator_settings">??
  • ????????<intent?android:action="com.android.settings.OPERATOR_APPLICATION_SETTING"?/>??
  • ????</header>??
  • ??
  • ????<!--?Other?wireless?and?network?controls?-->??
  • ????<header??
  • ????????android:id="@+id/wireless_settings"??
  • ????????android:title="@string/radio_controls_title"??
  • ????????android:breadCrumbTitle="@string/wireless_networks_settings_title"??
  • ????????android:fragment="com.android.settings.WirelessSettings"??
  • ????????android:icon="@drawable/empty_icon"?/>??
  • ??
  • ????<!--?DEVICE?-->??
  • ????<header?android:id="@+id/device_section"??
  • ????????android:title="@string/header_category_device"?/>??
  • ??
  • ????<!--?Home?-->??
  • ????<header??
  • ????????android:id="@+id/home_settings"??
  • ????????android:icon="@drawable/ic_settings_home"??
  • ????????android:fragment="com.android.settings.HomeSettings"??
  • ????????android:title="@string/home_settings"?/>??
  • ??
  • ????<!--?Sound?-->??
  • ????<header??
  • ????????android:id="@+id/sound_settings"??
  • ????????android:icon="@drawable/ic_settings_sound"??
  • ????????android:fragment="com.android.settings.SoundSettings"??
  • ????????android:title="@string/sound_settings"?/>??
  • ??
  • ????<!--?Display?-->??
  • ????<header??
  • ????????android:id="@+id/display_settings"??
  • ????????android:icon="@drawable/ic_settings_display"??
  • ????????android:fragment="com.android.settings.DisplaySettings"??
  • ????????android:title="@string/display_settings"?/>??
  • ??
  • ????<!--?Storage?-->??
  • ????<header??
  • ????????android:id="@+id/storage_settings"??
  • ????????android:fragment="com.android.settings.deviceinfo.Memory"??
  • ????????android:icon="@drawable/ic_settings_storage"??
  • ????????android:title="@string/storage_settings"?/>??
  • ??
  • ????<!--?Battery?-->??
  • ????<header??
  • ????????android:id="@+id/battery_settings"??
  • ????????android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"??
  • ????????android:icon="@drawable/ic_settings_battery"??
  • ????????android:title="@string/power_usage_summary_title"?/>??
  • ??
  • ????<!--?Application?Settings?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.applications.ManageApplications"??
  • ????????android:icon="@drawable/ic_settings_applications"??
  • ????????android:title="@string/applications_settings"??
  • ????????android:id="@+id/application_settings"?/>??
  • ??
  • ????<!--?Manage?users?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.users.UserSettings"??
  • ????????android:icon="@drawable/ic_settings_multiuser"??
  • ????????android:title="@string/user_settings_title"??
  • ????????android:id="@+id/user_settings"?/>??
  • ??
  • ????<!--?Manage?NFC?payment?apps?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.nfc.PaymentSettings"??
  • ????????android:icon="@drawable/ic_settings_nfc_payment"??
  • ????????android:title="@string/nfc_payment_settings_title"??
  • ????????android:id="@+id/nfc_payment_settings"?/>??
  • ??
  • ????<!--?Manufacturer?hook?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.WirelessSettings"??
  • ????????android:id="@+id/manufacturer_settings">??
  • ????????<intent?android:action="com.android.settings.MANUFACTURER_APPLICATION_SETTING"?/>??
  • ????</header>??
  • ??
  • ????<!--?PERSONAL?-->??
  • ????<header?android:id="@+id/personal_section"??
  • ????????android:title="@string/header_category_personal"?/>??
  • ??
  • ????<!--?Location?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.location.LocationSettings"??
  • ????????android:icon="@drawable/ic_settings_location"??
  • ????????android:title="@string/location_settings_title"??
  • ????????android:id="@+id/location_settings"?/>??
  • ??
  • ????<!--?Security?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.SecuritySettings"??
  • ????????android:icon="@drawable/ic_settings_security"??
  • ????????android:title="@string/security_settings_title"??
  • ????????android:id="@+id/security_settings"?/>??
  • ??
  • ????<!--?Language?-->??
  • ????<header??
  • ????????android:id="@+id/language_settings"??
  • ????????android:fragment="com.android.settings.inputmethod.InputMethodAndLanguageSettings"??
  • ????????android:icon="@drawable/ic_settings_language"??
  • ????????android:title="@string/language_settings"?/>??
  • ??
  • ????<!--?Backup?and?reset?-->??
  • ????<header??
  • ????????android:fragment="com.android.settings.PrivacySettings"??
  • ????????android:icon="@drawable/ic_settings_backup"??
  • ????????android:title="@string/privacy_settings"??
  • ????????android:id="@+id/privacy_settings"?/>??
  • ??
  • ????<!--?@Patch:?GTV?specific?changes?-->??
  • ????<!--?MStar?Android?Patch?Begin?-->??
  • ????<!--?Update?-->??
  • ????<header??
  • ????????android:id="@+id/update_settings"??
  • ????????android:fragment="com.android.settings.update.UpdateSettings"??
  • ????????android:title="@string/update_settings"?/>??
  • ????<!--?MStar?Android?Patch?End?-->??
  • ??
  • ????<!--??ACCOUNTS?section?-->??
  • ????<header??
  • ????????????android:id="@+id/account_settings"??
  • ????????????android:title="@string/account_settings"?/>??
  • ??
  • ????<header??
  • ????????????android:id="@+id/account_add"??
  • ????????????android:title="@string/add_account_label"??
  • ????????????android:icon="@drawable/ic_menu_add_dark">??
  • ????????<intent??
  • ????????????android:action="android.settings.ADD_ACCOUNT_SETTINGS"/>??
  • ????</header>??
  • ??
  • ????<!--?SYSTEM?-->??
  • ????<header?android:id="@+id/system_section"??
  • ????????android:title="@string/header_category_system"?/>??
  • ??
  • ????<!--?Date?&?Time?-->??
  • ????<header??
  • ????????android:id="@+id/date_time_settings"??
  • ????????android:fragment="com.android.settings.DateTimeSettings"??
  • ????????android:icon="@drawable/ic_settings_date_time"??
  • ????????android:title="@string/date_and_time_settings_title"?/>??
  • ??
  • ????<!--?Accessibility?feedback?-->??
  • ????<header??
  • ????????android:id="@+id/accessibility_settings"??
  • ????????android:fragment="com.android.settings.accessibility.AccessibilitySettings"??
  • ????????android:icon="@drawable/ic_settings_accessibility"??
  • ????????android:title="@string/accessibility_settings"?/>??
  • ??
  • ????<!--?Print?-->??
  • ????<header??
  • ????????android:id="@+id/print_settings"??
  • ????????android:fragment="com.android.settings.print.PrintSettingsFragment"??
  • ????????android:icon="@*android:drawable/ic_print"??
  • ????????android:title="@string/print_settings"?/>??
  • ??
  • ????<!--?Development?-->??
  • ????<header??
  • ????????android:id="@+id/development_settings"??
  • ????????android:fragment="com.android.settings.DevelopmentSettings"??
  • ????????android:icon="@drawable/ic_settings_development"??
  • ????????android:title="@string/development_settings_title"?/>??
  • ??
  • ????<!--?About?Device?-->??
  • ????<header??
  • ????????android:id="@+id/about_settings"??
  • ????????android:fragment="com.android.settings.DeviceInfoSettings"??
  • ????????android:icon="@drawable/ic_settings_about"??
  • ????????android:title="@string/about_settings"?/>??
  • ??
  • </preference-headers>??
  • 從上述xml可以看出,header的內(nèi)容是通過(guò)fragment來(lái)顯示,定義了每一個(gè)header對(duì)應(yīng)的fragment。

    ?

    在private void updateHeaderList(List<Header> target)函數(shù)中,會(huì)根據(jù)當(dāng)前平臺(tái)是否支持某項(xiàng)feature,決定是否顯示對(duì)應(yīng)的header:

    [java]?view plaincopy
  • else?if?(id?==?R.id.wifi_settings)?{??
  • ???????????????//?Remove?WiFi?Settings?if?WiFi?service?is?not?available.??
  • ???????????????if?(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI))?{??
  • ???????????????????target.remove(i);??
  • ???????????????}??
  • ???????????}?else?if?(id?==?R.id.bluetooth_settings)?{??
  • ???????????????//?Remove?Bluetooth?Settings?if?Bluetooth?service?is?not?available.??
  • ???????????????if?(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH))?{??
  • ???????????????????target.remove(i);??
  • ???????????????}??
  • ???????????}???
  • ?原文地址:http://blog.csdn.net/zhudaozhuan/article/details/40618837

    總結(jié)

    以上是生活随笔為你收集整理的android settings源代码分析(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。