赞
踩
由于工作需要,最近看了一下Android源码的Setting部分,现在就记录下自己的学习笔记。
转载请注明出处 :http://blog.csdn.net/xiaocaoxiekun
实例源码下载地址 :http://download.csdn.net/detail/xiaocaoxiekun/7707559
学习Settings 首先就需要了解Setting界面的组成。对于刚接触Android的我来说,开始的时候总是按照Layout 和 Activity的模式来研究Setting部分,结果可想而知,浪费了不少时间,后来了解到Setting 部分的结构基本都是采用PreferenceActivity和PreferenceFragment结合的实现方式。那通过PreferenceActivity 和 PreferenceFragment 是怎么组合在一起的呢?
首先就是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/文件夹下。
首先我们来看一下完整的布局文件:
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/development_settings_title">
-
- <PreferenceScreen
- android:key="local_backup_password"
- android:title="@string/local_backup_password_title"
- android:summary="@string/local_backup_password_summary_none"
- android:persistent="false" >
- <intent
- android:action="android.settings.privacy.SET_FULL_BACKUP_PASSWORD"
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.SetFullBackupPassword" />
- </PreferenceScreen>
-
- <CheckBoxPreference
- android:key="keep_screen_on"
- android:title="@string/keep_screen_on"
- android:summary="@string/keep_screen_on_summary"/>
-
- <ListPreference
- android:key="hdcp_checking"
- android:title="@string/hdcp_checking_title"
- android:dialogTitle="@string/hdcp_checking_dialog_title"
- android:entries="@array/hdcp_checking_titles"
- android:entryValues="@array/hdcp_checking_values" />
-
- <CheckBoxPreference
- android:key="enforce_read_external"
- android:title="@string/enforce_read_external_title"
- android:summary="@string/enforce_read_external_summary" />
-
- <PreferenceCategory android:key="debug_debugging_category"
- android:title="@string/debug_debugging_category">
-
- <CheckBoxPreference
- android:key="enable_adb"
- android:title="@string/enable_adb"
- android:summary="@string/enable_adb_summary"/>
-
- <Preference android:key="clear_adb_keys"
- android:title="@string/clear_adb_keys" />
-
- <CheckBoxPreference
- android:key="bugreport_in_power"
- android:title="@string/bugreport_in_power"
- android:summary="@string/bugreport_in_power_summary"/>
-
- <CheckBoxPreference
- android:key="allow_mock_location"
- android:title="@string/allow_mock_location"
- android:summary="@string/allow_mock_location_summary"/>
-
- <PreferenceScreen android:key="debug_app"
- android:title="@string/debug_app" />
-
- <CheckBoxPreference
- android:key="wait_for_debugger"
- android:title="@string/wait_for_debugger"
- android:summary="@string/wait_for_debugger_summary"/>
-
- <CheckBoxPreference
- android:key="verify_apps_over_usb"
- android:title="@string/verify_apps_over_usb_title"
- android:summary="@string/verify_apps_over_usb_summary"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:key="debug_input_category"
- android:title="@string/debug_input_category">
-
- <CheckBoxPreference
- android:key="show_touches"
- android:title="@string/show_touches"
- android:summary="@string/show_touches_summary"/>
-
- <CheckBoxPreference
- android:key="pointer_location"
- android:title="@string/pointer_location"
- android:summary="@string/pointer_location_summary"/>
-
- </PreferenceCategory>
-
- <PreferenceCategory android:key="debug_drawing_category"
- android:title="@string/debug_drawing_category">
-
- <CheckBoxPreference
- android:key="show_screen_updates"
- android:title="@string/show_screen_updates"
- android:summary="@string/show_screen_updates_summary"/>
-
- <CheckBoxPreference
- android:key="debug_layout"
- android:title="@string/debug_layout"
- android:summary="@string/debug_layout_summary"/>
-
- <ListPreference
- android:key="window_animation_scale"
- android:title="@string/window_animation_scale_title"
- android:persistent="false"
- android:entries="@array/window_animation_scale_entries"
- android:entryValues="@array/window_animation_scale_values" />
-
- <ListPreference
- android:key="transition_animation_scale"
- android:title="@string/transition_animation_scale_title"
- android:persistent="false"
- android:entries="@array/transition_animation_scale_entries"
- android:entryValues="@array/transition_animation_scale_values" />
-
- <ListPreference
- android:key="animator_duration_scale"
- android:title="@string/animator_duration_scale_title"
- android:persistent="false"
- android:entries="@array/animator_duration_scale_entries"
- android:entryValues="@array/animator_duration_scale_values" />
-
- <ListPreference
- android:key="overlay_display_devices"
- android:title="@string/overlay_display_devices_title"
- android:persistent="false"
- android:entries="@array/overlay_display_devices_entries"
- android:entryValues="@array/overlay_display_devices_values" />
-
- </PreferenceCategory>
-
- <PreferenceCategory android:key="debug_hw_drawing_category"
- android:title="@string/debug_hw_drawing_category">
-
- <CheckBoxPreference
- android:key="force_hw_ui"
- android:title="@string/force_hw_ui"
- android:summary="@string/force_hw_ui_summary"/>
-
- <CheckBoxPreference
- android:key="show_hw_screen_udpates"
- android:title="@string/show_hw_screen_updates"
- android:summary="@string/show_hw_screen_updates_summary"/>
-
- <CheckBoxPreference
- android:key="show_hw_layers_udpates"
- android:title="@string/show_hw_layers_updates"
- android:summary="@string/show_hw_layers_updates_summary"/>
-
- <CheckBoxPreference
- android:key="show_hw_overdraw"
- android:title="@string/show_hw_overdraw"
- android:summary="@string/show_hw_overdraw_summary"/>
-
- <ListPreference
- android:key="show_non_rect_clip"
- android:title="@string/show_non_rect_clip"
- android:persistent="false"
- android:entries="@array/show_non_rect_clip_entries"
- android:entryValues="@array/show_non_rect_clip_values" />
-
- <CheckBoxPreference
- android:key="force_msaa"
- android:title="@string/force_msaa"
- android:summary="@string/force_msaa_summary"/>
-
- <CheckBoxPreference
- android:key="disable_overlays"
- android:title="@string/disable_overlays"
- android:summary="@string/disable_overlays_summary"/>
-
- </PreferenceCategory>
-
- <PreferenceCategory android:key="debug_monitoring_category"
- android:title="@string/debug_monitoring_category">
-
- <CheckBoxPreference
- android:key="strict_mode"
- android:title="@string/strict_mode"
- android:summary="@string/strict_mode_summary"/>
-
- <CheckBoxPreference
- android:key="show_cpu_usage"
- android:title="@string/show_cpu_usage"
- android:summary="@string/show_cpu_usage_summary"/>
-
- <ListPreference
- android:key="track_frame_time"
- android:title="@string/track_frame_time"
- android:persistent="false"
- android:entries="@array/track_frame_time_entries"
- android:entryValues="@array/track_frame_time_values" />
-
- <ListPreference
- android:key="enable_opengl_traces"
- android:title="@string/enable_opengl_traces_title"
- android:persistent="false"
- android:entries="@array/enable_opengl_traces_entries"
- android:entryValues="@array/enable_opengl_traces_values" />
-
- </PreferenceCategory>
-
- <PreferenceCategory android:key="debug_applications_category"
- android:title="@string/debug_applications_category">
-
- <CheckBoxPreference
- android:key="immediately_destroy_activities"
- android:title="@string/immediately_destroy_activities"
- android:summary="@string/immediately_destroy_activities_summary"/>
-
- <ListPreference
- android:key="app_process_limit"
- android:title="@string/app_process_limit_title"
- android:persistent="false"
- android:entries="@array/app_process_limit_entries"
- android:entryValues="@array/app_process_limit_values" />
-
- <CheckBoxPreference
- android:key="show_all_anrs"
- android:title="@string/show_all_anrs"
- android:summary="@string/show_all_anrs_summary"/>
-
- <CheckBoxPreference
- android:key="experimental_webview"
- android:title="@string/experimental_webview"
- android:summary="@string/experimental_webview_summary"/>
- </PreferenceCategory>
- </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可用
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.device_info_status);
- }
效果如下:
今天就学习到这,明天学习PreferenceActivity 中的事件相应和 数据存储,哈哈,写博客真费时间啊。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。