PreferenceActivity的使用
PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Preference则不需要自己控制Preference的读写,PreferenceActivity会为我们处理一切。
PreferenceActivity与普通的Activity不同,它不是使用界面布局文件,而是使用选项设置的布局文件。
选项设置布局文件以PreferenceScreen作为根元素来表示定义一个参数设置界面布局。
从3.0以后Android不再推荐直接让PreferenceActivity加载选项设置布局文件,而是建议将PreferenceActivity与PreferenceFragment结合使用。
先新建一个工程:

Activity继承自PreferenceActivity
01.package com.example.testpreferenceactivity;02. 03.import android.os.Bundle;04.import android.preference.PreferenceActivity;05. 06.public class MainActivity extends PreferenceActivity {07. 08. @Override09. protected void onCreate(Bundle savedInstanceState) {10. super.onCreate(savedInstanceState);11. //setContentView(R.layout.activity_main);12. addPreferencesFromResource(R.xml.preference);13. }14.}在res目录下新建立一个xml目录,在该目录中建立preference.xml
01.<?xml version="1.0" encoding="UTF-8"?>02.<PreferenceScreen 04. android:title="Settings">05. <CheckBoxPreference 06. android:title="Love me?"07. android:summaryOn="Yes,I love you!"08. android:summaryOff="No,I am sorry."09. android:defaultValue="true">10. </CheckBoxPreference>11.</PreferenceScreen>
可以将上面的preference.xml中代码修改如下,就可实现嵌套设置菜单
01.<?xml version="1.0" encoding="UTF-8"?>02.<PreferenceScreen 04. android:title="Settings">05. <PreferenceScreen 07. android:title="Emotions"08. android:summary="settings about emotions">09. <CheckBoxPreference 10. android:title="Love me?"11. android:summaryOn="Yes,I love you!"12. android:summaryOff="No,I am sorry."13. android:defaultValue="true">14. </CheckBoxPreference>15. <CheckBoxPreference 16. android:title="Hate me?"17. android:summaryOn="Yes,I hate you!"18. android:summaryOff="No,you are a good person."19. android:defaultValue="false">20. </CheckBoxPreference> 21. </PreferenceScreen>22. <PreferenceScreen 24. android:title="Relations"25. android:summary="settings about relations">26. <CheckBoxPreference 27. android:title="Family?"28. android:summaryOn="Yes,we are family!"29. android:summaryOff="No,I am sorry."30. android:defaultValue="true">31. </CheckBoxPreference>32. <CheckBoxPreference 33. android:title="Friends?"34. android:summaryOn="Yes,we are friends!"35. android:summaryOff="No,I am sorry."36. android:defaultValue="false">37. </CheckBoxPreference> 38. </PreferenceScreen> 39.</PreferenceScreen>将上面xml文件中间那两个PreferenceScreen改为PreferenceCategory就可以看到PreferenceCategory的显示效果了

Android系统提供的还有以对话框显示的DialogPreference,可以输入文本的EditTextPreference,以列表方式显示供选择的ListPreference和设置铃声用的RingtonePreference。 详细请看:http://blog.csdn.net/ichliebephone/article/details/5916320
在上面我们提到Android不再推荐直接让PreferenceActivity加载选项设置布局文件,下面我们来看看PreferenceActivity与PreferenceFragment结合使用。
PreferenceActivity加载的选项设置列表布局文件如下:
01.<?xml version="1.0" encoding="utf-8"?>02.<preference-headers 04. <!-- 指定启动指定PreferenceFragment的列表项 -->05. <header android:fragment=06. "org.crazyit.app.PreferenceActivityTest$Prefs1Fragment"07. android:icon="@drawable/ic_settings_applications"08. android:title="程序选项设置"09. android:summary="设置应用的相关选项" />10. <!-- 指定启动指定PreferenceFragment的列表项 --> 11. <header android:fragment=12. "org.crazyit.app.PreferenceActivityTest$Prefs2Fragment"13. android:icon="@drawable/ic_settings_display"14. android:title="界面选项设置 "15. android:summary="设置显示界面的相关选项">16. <!-- 使用extra可向Activity传入额外的数据 -->17. <extra android:name="website"18. android:value="www.crazyit.org" />19. </header>20. <!-- 使用Intent启动指定Activity的列表项 -->21. <header22. android:icon="@drawable/ic_settings_display"23. android:title="使用Intent"24. android:summary="使用Intent启动某个Activity">25. <intent android:action="android.intent.action.VIEW"27. </header>28.</preference-headers>上面代码中Prefs1Fragment、Prefs2Fragment是两个内部类
在PreferenceActivity中重写onBuidHeaders方法来加载上面的页面布局
1.public void onBuildHeaders(List<Header> target)2.{3. // 加载选项设置列表的布局文件4. loadHeadersFromResource(R.xml.preference_headers, target);5.}PreferenceActivity内部还有两个内部类,代码如下:
01./**02. *03. */04.package org.crazyit.app;05. 06.import java.util.List;07. 08.import android.os.Bundle;09.import android.preference.PreferenceActivity;10.import android.preference.PreferenceFragment;11.import android.widget.Button;12.import android.widget.Toast;13. 14. 15.public class PreferenceActivityTest extends PreferenceActivity16.{17. @Override18. protected void onCreate(Bundle savedInstanceState)19. {20. super.onCreate(savedInstanceState);21. // 该方法用于为该界面设置一个标题按钮22. if (hasHeaders())23. {24. Button button = new Button(this);25. button.setText("设置操作");26. // 将该按钮添加到该界面上27. setListFooter(button);28. }29. }30. // 重写该该方法,负责加载页面布局文件31. @Override32. public void onBuildHeaders(List<Header> target)33. {34. // 加载选项设置列表的布局文件35. loadHeadersFromResource(R.xml.preference_headers, target);36. }37. 38. public static class Prefs1Fragment extends PreferenceFragment39. {40. @Override41. public void onCreate(Bundle savedInstanceState)42. {43. super.onCreate(savedInstanceState);44. addPreferencesFromResource(R.xml.preferences);45. }46. }47. public static class Prefs2Fragment extends PreferenceFragment48. {49. @Override50. public void onCreate(Bundle savedInstanceState)51. {52. super.onCreate(savedInstanceState);53. addPreferencesFromResource(R.xml.display_prefs);54. // 获取传入该Fragment的参数55. String website = getArguments().getString("website");56. Toast.makeText(getActivity()57. , "网站域名是:" + website , Toast.LENGTH_LONG).show();58. }59. } 60.}在两个Fragment中我们使用addPreferencesFromResource方法来加载设置的布局文件
preference.xml
01.<?xml version="1.0" encoding="utf-8"?>02.<PreferenceScreen 04.<!-- 设置系统铃声 -->05.<RingtonePreference06. android:ringtoneType="all"07. android:title="设置铃声"08. android:summary="选择铃声(测试RingtonePreference)"09. android:showDefault="true"10. android:key="ring_key"11. android:showSilent="true">12.</RingtonePreference>13.<PreferenceCategory android:title="个人信息设置组">14. <!-- 通过输入框填写用户名 -->15. <EditTextPreference16. android:key="name"17. android:title="填写用户名"18. android:summary="填写您的用户名(测试EditTextPreference)"19. android:dialogTitle="您所使用的用户名为:" />20. <!-- 通过列表框选择性别 -->21. <ListPreference22. android:key="gender"23. android:title="性别"24. android:summary="选择您的性别(测试ListPreference)"25. android:dialogTitle="ListPreference"26. android:entries="@array/gender_name_list"27. android:entryValues="@array/gender_value_list" />28.</PreferenceCategory>29.<PreferenceCategory android:title="系统功能设置组 ">30. <CheckBoxPreference31. android:key="autoSave"32. android:title="自动保存进度"33. android:summaryOn="自动保存: 开启"34. android:summaryOff="自动保存: 关闭"35. android:defaultValue="true" />36.</PreferenceCategory> 37.</PreferenceScreen>display_prefs.xml
01.<?xml version="1.0" encoding="utf-8"?>02.<PreferenceScreen04.<PreferenceCategory android:title="背景灯光组">05. <!-- 通过列表框选择灯光强度 -->06. <ListPreference07. android:key="light"08. android:title="灯光强度"09. android:summary="请选择灯光强度(测试ListPreference)"10. android:dialogTitle="请选择灯光强度"11. android:entries="@array/light_strength_list"12. android:entryValues="@array/light_value_list" />13.</PreferenceCategory>14.<PreferenceCategory android:title="文字显示组 ">15. <!-- 通过SwitchPreference设置是否自动滚屏 -->16. <SwitchPreference17. android:key="autoScroll"18. android:title="自动滚屏"19. android:summaryOn="自动滚屏: 开启"20. android:summaryOff="自动滚屏: 关闭"21. android:defaultValue="true" />22.</PreferenceCategory>23.</PreferenceScreen>运行结果:




源代码下载:http://www.it165.net/uploadfile/files/2014/0212/iPhones.rar
PreferenceActivity的使用的更多相关文章
- Android ListView ListActivity PreferenceActivity背景变黑的问题ZT
Android ListView ListActivity PreferenceActivity背景变黑的问题 ListView在滚动时背景会变暗甚至变黑,这个要从Listview的效果说起,默认的L ...
- Android笔记——PreferenceActivity结合PreferenceFragment创建设置界面
1.创建类继承PreferenceActivity 2.该类必须重写OnBuildHeaders和isValidFragment方法. (1)OnBuildHeaders方法中使用lo ...
- PreferenceActivity使用方法
public class MainActivity extends Activity { @Override protected void onCreate(Bundle save ...
- Xamarin android PreferenceActivity 实现应用程序首选项设置(一)
应用程序首选项屏幕 类似系统设置界面. PreferenceActivity 是另一种类型的Activity,通过PreferenceActivity 可以以最少量的工作显示某些Preference列 ...
- PreferenceActivity 自动保存属性
package com.example.preference; import android.content.Context; import android.os.Bundle; import and ...
- Android 软件开发之 PreferenceActivity 中的组件
1.PreferenceActivity 介绍 PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的 ...
- Android学习笔记(十四)方便实用的首选项-PreferenceActivity
突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家.其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceAct ...
- 关于PreferenceActivity的使用和一些问题的解决(自己定义Title和取值)
android的Setting往往用PreferenceActivity来写的 我们在建立layout文件: <PreferenceScreen xmlns:android="http ...
- Android之PreferenceActivity 详解
看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找. PerferenceActivity是什么,看下面的截图: ...
- Android保存设置的PreferenceActivity
界面XML文件:preference_setting.xml <?xml version="1.0" encoding="UTF-8"?> < ...
随机推荐
- 一篇文章让你彻底搞清楚Python中self的含义
刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数? 你看完这篇文章后就会明白所有的疑问. self代表类的实例,而非类. ...
- js经验1
1. input 获得焦点 focus(); 2.获得文档的的title _title = document.title; 3.定时检查删除dom定时器 var deleteDomInterval ...
- Metasploit渗透测试魔鬼训练营
首本中文原创Metasploit渗透测试著作,国内信息安全领域布道者和资深Metasploit渗透测试专家领衔撰写,极具权威性.以实践为导向,既详细讲解了Metasploit渗透测试的技术.流程.方法 ...
- 【网络流24题】No. 20 深海机器人问题 (费用流)
[题意] 深海资源考察探险队的潜艇将到达深海的海底进行科学考察.潜艇内有多个深海机器人. 潜艇到达深海海底后, 深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本. 沿 ...
- 【HDU 2853】Assignment (KM)
Assignment Problem Description Last year a terrible earthquake attacked Sichuan province. About 300, ...
- Ubuntu 安装基础教程
转自:http://teliute.org/linux/Ubsetup/index.html 1.进入 live cd 桌面 1)设置好启动后,断开网络,然后重启动计算机,可以用硬盘启动,也可以刻成 ...
- Qt之自定义插件(for Qt Designer)
之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...
- InvalidIndexNameException[Invalid index name [2Shard], must be lowercase]
[2016-10-11 14:16:42,191][DEBUG][action.admin.indices.create] [Feron] [2Shard] f ailed to create [2S ...
- No modifications are allowed to a locked ParameterMap
错误:java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap at org.apa ...
- 《unix网络编程》笔记
inet_pton和inetntop函数.字母p和n代表presentation和numeric.地址的表达presentation格式通常是ASCIL串,数值(numeric)格式则是存在于套接字地 ...