当前位置:   article > 正文

android Setting 模块的学习之一(PreferenceActivity学习)_andriod setting框架学习

andriod setting框架学习

        由于工作需要,最近看了一下Android源码的Setting部分,现在就记录下自己的学习笔记。

       转载请注明出处 :http://blog.csdn.net/xiaocaoxiekun

       实例源码下载地址 :http://download.csdn.net/detail/xiaocaoxiekun/7707559

      PreferenceActivity  简介

       学习Settings 首先就需要了解Setting界面的组成。对于刚接触Android的我来说,开始的时候总是按照Layout 和 Activity的模式来研究Setting部分,结果可想而知,浪费了不少时间,后来了解到Setting 部分的结构基本都是采用PreferenceActivity和PreferenceFragment结合的实现方式。那通过PreferenceActivityPreferenceFragment 是怎么组合在一起的呢?

        首先就是PreferenceActivity ,通过规范的Android 类名我们就可以猜测到其为Activity的子类,同时其必定和保存数据的SharedPreference有着一定的联系,我们先来看一下Android4.4的API:

       

       既然它是Activity ,那么它就必然和Activity有着同样的生命周期,同样的是需要在onCreate(Bundle icicle) 方法中完成相关组件元素和布局的加载,但是PreferenceActivity的布局加载并不是Activity中常用的setContentView(R.layout.activity_main); 在PreferenceActivity中常用的加载布局文件的方式为:addPreferencesFromResource(R.xml.device_info_status);其中device_info_status布局文件存放在项目中的res/xml/文件夹下。

      PreferenceActivity  中使用到的布局文件的简介

      首先我们来看一下完整的布局文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:title="@string/development_settings_title">
  4. <PreferenceScreen
  5. android:key="local_backup_password"
  6. android:title="@string/local_backup_password_title"
  7. android:summary="@string/local_backup_password_summary_none"
  8. android:persistent="false" >
  9. <intent
  10. android:action="android.settings.privacy.SET_FULL_BACKUP_PASSWORD"
  11. android:targetPackage="com.android.settings"
  12. android:targetClass="com.android.settings.SetFullBackupPassword" />
  13. </PreferenceScreen>
  14. <CheckBoxPreference
  15. android:key="keep_screen_on"
  16. android:title="@string/keep_screen_on"
  17. android:summary="@string/keep_screen_on_summary"/>
  18. <ListPreference
  19. android:key="hdcp_checking"
  20. android:title="@string/hdcp_checking_title"
  21. android:dialogTitle="@string/hdcp_checking_dialog_title"
  22. android:entries="@array/hdcp_checking_titles"
  23. android:entryValues="@array/hdcp_checking_values" />
  24. <CheckBoxPreference
  25. android:key="enforce_read_external"
  26. android:title="@string/enforce_read_external_title"
  27. android:summary="@string/enforce_read_external_summary" />
  28. <PreferenceCategory android:key="debug_debugging_category"
  29. android:title="@string/debug_debugging_category">
  30. <CheckBoxPreference
  31. android:key="enable_adb"
  32. android:title="@string/enable_adb"
  33. android:summary="@string/enable_adb_summary"/>
  34. <Preference android:key="clear_adb_keys"
  35. android:title="@string/clear_adb_keys" />
  36. <CheckBoxPreference
  37. android:key="bugreport_in_power"
  38. android:title="@string/bugreport_in_power"
  39. android:summary="@string/bugreport_in_power_summary"/>
  40. <CheckBoxPreference
  41. android:key="allow_mock_location"
  42. android:title="@string/allow_mock_location"
  43. android:summary="@string/allow_mock_location_summary"/>
  44. <PreferenceScreen android:key="debug_app"
  45. android:title="@string/debug_app" />
  46. <CheckBoxPreference
  47. android:key="wait_for_debugger"
  48. android:title="@string/wait_for_debugger"
  49. android:summary="@string/wait_for_debugger_summary"/>
  50. <CheckBoxPreference
  51. android:key="verify_apps_over_usb"
  52. android:title="@string/verify_apps_over_usb_title"
  53. android:summary="@string/verify_apps_over_usb_summary"/>
  54. </PreferenceCategory>
  55. <PreferenceCategory android:key="debug_input_category"
  56. android:title="@string/debug_input_category">
  57. <CheckBoxPreference
  58. android:key="show_touches"
  59. android:title="@string/show_touches"
  60. android:summary="@string/show_touches_summary"/>
  61. <CheckBoxPreference
  62. android:key="pointer_location"
  63. android:title="@string/pointer_location"
  64. android:summary="@string/pointer_location_summary"/>
  65. </PreferenceCategory>
  66. <PreferenceCategory android:key="debug_drawing_category"
  67. android:title="@string/debug_drawing_category">
  68. <CheckBoxPreference
  69. android:key="show_screen_updates"
  70. android:title="@string/show_screen_updates"
  71. android:summary="@string/show_screen_updates_summary"/>
  72. <CheckBoxPreference
  73. android:key="debug_layout"
  74. android:title="@string/debug_layout"
  75. android:summary="@string/debug_layout_summary"/>
  76. <ListPreference
  77. android:key="window_animation_scale"
  78. android:title="@string/window_animation_scale_title"
  79. android:persistent="false"
  80. android:entries="@array/window_animation_scale_entries"
  81. android:entryValues="@array/window_animation_scale_values" />
  82. <ListPreference
  83. android:key="transition_animation_scale"
  84. android:title="@string/transition_animation_scale_title"
  85. android:persistent="false"
  86. android:entries="@array/transition_animation_scale_entries"
  87. android:entryValues="@array/transition_animation_scale_values" />
  88. <ListPreference
  89. android:key="animator_duration_scale"
  90. android:title="@string/animator_duration_scale_title"
  91. android:persistent="false"
  92. android:entries="@array/animator_duration_scale_entries"
  93. android:entryValues="@array/animator_duration_scale_values" />
  94. <ListPreference
  95. android:key="overlay_display_devices"
  96. android:title="@string/overlay_display_devices_title"
  97. android:persistent="false"
  98. android:entries="@array/overlay_display_devices_entries"
  99. android:entryValues="@array/overlay_display_devices_values" />
  100. </PreferenceCategory>
  101. <PreferenceCategory android:key="debug_hw_drawing_category"
  102. android:title="@string/debug_hw_drawing_category">
  103. <CheckBoxPreference
  104. android:key="force_hw_ui"
  105. android:title="@string/force_hw_ui"
  106. android:summary="@string/force_hw_ui_summary"/>
  107. <CheckBoxPreference
  108. android:key="show_hw_screen_udpates"
  109. android:title="@string/show_hw_screen_updates"
  110. android:summary="@string/show_hw_screen_updates_summary"/>
  111. <CheckBoxPreference
  112. android:key="show_hw_layers_udpates"
  113. android:title="@string/show_hw_layers_updates"
  114. android:summary="@string/show_hw_layers_updates_summary"/>
  115. <CheckBoxPreference
  116. android:key="show_hw_overdraw"
  117. android:title="@string/show_hw_overdraw"
  118. android:summary="@string/show_hw_overdraw_summary"/>
  119. <ListPreference
  120. android:key="show_non_rect_clip"
  121. android:title="@string/show_non_rect_clip"
  122. android:persistent="false"
  123. android:entries="@array/show_non_rect_clip_entries"
  124. android:entryValues="@array/show_non_rect_clip_values" />
  125. <CheckBoxPreference
  126. android:key="force_msaa"
  127. android:title="@string/force_msaa"
  128. android:summary="@string/force_msaa_summary"/>
  129. <CheckBoxPreference
  130. android:key="disable_overlays"
  131. android:title="@string/disable_overlays"
  132. android:summary="@string/disable_overlays_summary"/>
  133. </PreferenceCategory>
  134. <PreferenceCategory android:key="debug_monitoring_category"
  135. android:title="@string/debug_monitoring_category">
  136. <CheckBoxPreference
  137. android:key="strict_mode"
  138. android:title="@string/strict_mode"
  139. android:summary="@string/strict_mode_summary"/>
  140. <CheckBoxPreference
  141. android:key="show_cpu_usage"
  142. android:title="@string/show_cpu_usage"
  143. android:summary="@string/show_cpu_usage_summary"/>
  144. <ListPreference
  145. android:key="track_frame_time"
  146. android:title="@string/track_frame_time"
  147. android:persistent="false"
  148. android:entries="@array/track_frame_time_entries"
  149. android:entryValues="@array/track_frame_time_values" />
  150. <ListPreference
  151. android:key="enable_opengl_traces"
  152. android:title="@string/enable_opengl_traces_title"
  153. android:persistent="false"
  154. android:entries="@array/enable_opengl_traces_entries"
  155. android:entryValues="@array/enable_opengl_traces_values" />
  156. </PreferenceCategory>
  157. <PreferenceCategory android:key="debug_applications_category"
  158. android:title="@string/debug_applications_category">
  159. <CheckBoxPreference
  160. android:key="immediately_destroy_activities"
  161. android:title="@string/immediately_destroy_activities"
  162. android:summary="@string/immediately_destroy_activities_summary"/>
  163. <ListPreference
  164. android:key="app_process_limit"
  165. android:title="@string/app_process_limit_title"
  166. android:persistent="false"
  167. android:entries="@array/app_process_limit_entries"
  168. android:entryValues="@array/app_process_limit_values" />
  169. <CheckBoxPreference
  170. android:key="show_all_anrs"
  171. android:title="@string/show_all_anrs"
  172. android:summary="@string/show_all_anrs_summary"/>
  173. <CheckBoxPreference
  174. android:key="experimental_webview"
  175. android:title="@string/experimental_webview"
  176. android:summary="@string/experimental_webview_summary"/>
  177. </PreferenceCategory>
  178. </PreferenceScreen>

    从上面的布局文件中我们可以看出,ReferenceActivity常用的布局文件和Layout中的布局文件有着很大的不同,那么PreferenceActivity 中的布局文件中的元素都代表着什么呢? 下面我们主要讲一下PreferenceActivity的布局:

     控件元素:

   Preference: 文本框, 相当于Layout布局中的 TextView ;

   CheckPreference : 复选框 ,相当于Layout布局中的CheckBox ;

   EditTextPreference : 文本编辑框 ,相当于Layout布局中的EditText ; 

   ListPreference  : 列表框 ,相当于Layout布局中的ListView ;

   RingtonePreference :铃声选择 ;

     控件容器:

   PreferenceCategory :相当于Layout布局中的LinearLayout、RelativeLayout,用于组合一组Preference,达到分类效果

   PreferenceScreen  : 所有Preference元素的根节点

     控件属性简介:

       android:key : Preference的唯一标示,相当于java Map中的key,通过此Key得到关联的Preference对象 

   android:defaultValue: 默认值。CheckPreference 可以选择 ”true|false”;EditTextPreference的默认值可为”this is a EdittextPreference” 。

   android:enabled: 表示该Preference是否可用状态,可以选择"true|false"。    

   android:title: 每个Preference 显示的主标题,用大字体表示

   android:summary: 每个Preference 显示的副标题,小字体表示 (可以没有)

   android:persistent: Preference元素所对应的值是否写入sharedPreference文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。

   android:dependency 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;B不可用,则A不可用。

   android:disableDependentsState:  与android:dependency 相反。B可用,则A不可用;B不可用,则A可用

 

     在PreferenceActivity中调用布局文件:

        

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. addPreferencesFromResource(R.xml.device_info_status);
  5. }


 

      效果如下:

 

  今天就学习到这,明天学习PreferenceActivity 中的事件相应和 数据存储,哈哈,写博客真费时间啊。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/458135
推荐阅读
相关标签
  

闽ICP备14008679号