android Setting 模块的学习之一(PreferenceActivity学习)

        由于工作需要,最近看了一下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  中使用到的布局文件的简介

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

   <?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可用

 

     在PreferenceActivity中调用布局文件:

        

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.device_info_status);  
	}


 

      效果如下:

 

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Settings是一个应用程序,用于管理和配置Android设备的各种设置选项。它是通过在AndroidManifest.xml文件中声明相应的Activity和Intent过滤器来实现的。\[1\]通过使用"android.intent.action.MAIN"的action和"android.intent.category.DEFAULT"的category,Settings.APK默认从Settings这个Activity进入。而在Launcher进入时,启动的是Settings.java,由"android.intent.category.LAUNCHER"决定。\[1\] 如果我们想将Security设置项添加到shortcut列表,可以在androidmanifest.xml中声明Settings$SecuritySettingsActivity部分,并添加<category android:name="com.android.settings.SHORTCUT" />。\[2\] 当执行startActivity后,将启动SubSettings.java。这将再次执行SubSettings和PreferenceActivity的onCreate方法,但不会进入Settings的主界面,因为使用的intent对象不同。在onCreate函数中,initialFragment将被初始化为com.android.settings.DisplaySettings,然后进入switchToHeader(),最后通过transaction.replace(com.android.internal.R.id.prefs, f)将fragment显示出来。同时,其他view的visibility也会进行设置,以保证只显示prefs,如将com.android.internal.R.id.headers的visibility设置为VIEW.GONE。\[3\] 总结来说,Android Settings是一个用于管理和配置Android设备设置的应用程序,通过声明Activity和Intent过滤器来实现不同的功能和界面。 #### 引用[.reference_title] - *1* *2* *3* [Android Settings总结](https://blog.csdn.net/joychanger/article/details/51336527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值