突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家。其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceActivity在使用起来还是非常方便与实用的,再加上介绍PreferenceActivity的貌似不太多,还是发出来吧,以备自己和其他人后期参考。

  Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的Preferences Screen。通过使用该框架,能够确保应用程序中的PreferenceActivity与本地和其他第三方应用程序中所使用的一致。当然,如果对PreferenceActivity深入研究起来还是有一定复杂度的,这里只介绍一些最常用的。

  一、创建Preference Screen布局。

  首先需要在xml文件中创建Preference Screen布局以供PreferenceActivity调用。与标准UI布局不同,首选项定义存储在res/xml资源文件夹中。方便的时,有很多控件都已经定义好,我们直接添加到Preference Screent中使用就可以了,一些原生的首选项控件如下:

  · CheckBoxPreference :一个标准的首选项复选框空GIA你,用于将首选项设置为真或者假。

  · EditTextPreference :允许用户输入一个字符串作为一个首选项。在运行时选择首选项文本将会显示一个输入对话框。

  · ListTextPreference :该首选项是一个包含了可供选择的值的列表。可以定义不同的数组用于包含显示文本和选项值。

  · MultiSelectPreference :在Activity 3.0(API level 11)中引入的首选项,类似于复选框列表。

  · RingtonePreference : 一个专用的列表首选项,显示可供用户选的可用铃声列表。

  除了一些原生的首选项控件外,还可以通过扩展Preference类自定义首选项控件。

  下面在res/xml下创建preference_activity.xml,在里面添加几个控件,代码如下:(注意:在创建时注意将Resource Type选为 Preference类型,file要小写)

 <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:key="checkbox"
android:title="开关"
android:summaryOn="开"
android:summaryOff="关"/> <ListPreference
android:key="list"
android:title="选择"
android:summary="请选择"
android:entries="@array/entries"
android:entryValues="@array/values"/> <EditTextPreference
android:key="edit"
android:title="title"
android:summary="summary"
android:dialogTitle="dialogTitle"
android:dialogMessage="dialogMessage"/> </PreferenceScreen>

其中ListPreference控件用到得entries和values如下(在res/values/list_pf.xml):

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array
name="entries">
<item >一</item>
<item >二</item>
<item >三</item>
</string-array>
<string-array name="values">
<item >第一项</item>
<item >第二项</item>
<item >第三项</item>
</string-array>
</resources>

  二、创建PreferenceActivity的子类

  类似于创建一个Activity,可以通过继承PreferenceActivity创建一个其子类,并通过addPreferencesFromResource(R.xml.preference_activity)方法加载Preference Screen文件。各控件的具体用法,请参考注释。

 /**
*
* @author liuwei
* @data 2015/11/08
*/
public class MyPreferenceActivity extends PreferenceActivity {
PreferenceManager pm;
CheckBoxPreference checkbox;
ListPreference listP;
EditTextPreference editP; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_activity);
// 获取PreferenceManager对象
pm = getPreferenceManager(); /**************** 绑定checkbox控件 *******************/
checkbox = (CheckBoxPreference) pm.findPreference("checkbox");
// 获取控件状态
boolean n = checkbox.isChecked();
Toast.makeText(getApplicationContext(), "当前状态为:" + n, 0).show(); /**************** 绑定listP控件 **********************/
listP = (ListPreference) pm.findPreference("list");
// 获取listP控件的key和value
CharSequence e = listP.getEntry();
String v = listP.getValue();
Toast.makeText(getApplicationContext(), e + ":" + v, 0).show(); /**************** 绑定editP控件 **********************/
editP = (EditTextPreference) pm.findPreference("edit");
// 获取控件内容
String edit = editP.getText();
Toast.makeText(getApplicationContext(), "编辑内容:" + edit, 0).show();
}
}

  别忘了AndroidManifest.xml中配置,如下:

<activity
  android:name=".MyPreferenceActivity">
</activity>

  最后试试效果,还是挺棒的。

Android学习笔记(十四)方便实用的首选项-PreferenceActivity的更多相关文章

  1. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  2. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  3. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  4. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  5. Android学习笔记(四)——再探Intent

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们可以使用 Intent 来启动一个活动, 还可以在启动活动的时候传递数据的,下面一起来看一下: 一.向下一 ...

  6. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  7. Android学习笔记_3_四种布局

    Android布局是应用界面开发的重要一环,在Android中,共有四种布局方式, 分别是:FrameLayout( 帧布局 ).LinearLayout (线性布局).TableLayout(表格布 ...

  8. 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区

    目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity     ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...

  9. 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考

    目录(?)[-] 编程思想封装接口 fragment和activity以其他fragment之间的通信 编程思想:封装接口 在小例子中,fragment会调用activity的onDialogDone ...

随机推荐

  1. HDU 1176 免费馅饼(数字三角形)

    免费馅饼 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉 ...

  2. OpenGL_Qt学习笔记之_05(纹理映射)(转)

    转自:http://www.cnblogs.com/tornadomeet/archive/2012/08/24/2654719.html 纹理映射基础知识 什么叫纹理映射,一开始我也不明白,感觉这个 ...

  3. map容器对象插入数据的4种方式

    #include <string> #include <iostream>  #include <map>  #include <utility>  u ...

  4. linux指令大全(完整篇)(转)

       http://blog.chinaunix.net/uid-9681606-id-1998590.html  linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类:  ...

  5. object 属性 对象的继承 (原型, call,apply)

    object 为一切对象的基类! 属性:constructor: 对创建对象的函数的引用Prototype: 原型(类型) hasOwnProperty(property):判断对象是否有某个特定的属 ...

  6. 跨域、sql注入、xss攻击

    这几天遇到这三个问题,现在简单的记录下来. 1.跨域 如我服务器的域名是www.test1.com,我在另一个服务器www.test2.com通过ajax访问www.test1.com的数据时,就引起 ...

  7. POJ 1472 Instant Complexity 应该叫它编程题。。

    题目:http://poj.org/problem?id=1472 这个题目是分到“模拟题”一类的,我觉得模拟的成分比较少,主要考察编程能力.独立写完这个题特别兴奋...所以我必须好好说一说,独家哦. ...

  8. (转) 各种好用的插件 Xcode

    时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我提升编码速度和工作效率的工具 ...

  9. Cocoa Touch 框架

    Cocoa Touch包括: (1)Core Animation: 通过Core Animation,可以通过一个基于独立图层的简单的编程模型来创建丰富的用户体验. (2)Core Audio: Co ...

  10. hdu 1875

    题目很简单,我却WA了几十次,找错误找了我一个小时: 蛋都碎了! 后来发现错误的地方竟然是memset: 用一个循环来替代它就A了:╮(╯▽╰)╭ 今晚回去好好的看看memset!!! 发个代码纪念下 ...