突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家。其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉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. 15_动态SQL

    [UserMapper.xml]和之前的作对比 <mapper namespace="com.Higgin.Mybatis.mapper.UserMapper"> &l ...

  2. Dell Remote Access Controller 添加和配置 DRAC/MC 用户

    iDRAC设置 单击“Configuration”(配置)选项卡并选择“Users”(用户). 单击“Username”(用户名)列下的 [Available](可用)添加新用户,或单击“Userna ...

  3. Linux的前世今生

    Linux的起源 说到Linux[/ˈlɪnəks/],想必大家也会自然而然地想到他的创始人——被称为“Linux之父”的林纳斯·托瓦兹(Linus Torvalds).其实,在Linux出现之前,还 ...

  4. ASP.NET中Json的处理

    要使用.NET自带的JSON处理工具需要引用下面的命名空间: using System.Web.Script.Serialization; 1.编码 myConfig mc = new myConfi ...

  5. x264_param_t结构

    typedef struct x264_param_t { unsigned int cpu; // CPU 标志位 int i_threads; // 并行编码多帧; 线程数,为0则自动多线程编码 ...

  6. Wap站总结一

    前段时间负责了公司的wap站前端工作,目前wap站的基础及较为复杂的几张页面都已经出来,现根据自己的一些经验,贴出部分心得,希望对现在或者以后可能会接触到Wap站的一些人有些帮助 一.本次WAP网站的 ...

  7. javascript下动态this与动态绑定实例代码

    this 的值取决于 function 被调用的方式,一共有四种, 如果一个 function 是一个对象的属性,该 funtion 被调用的时候,this 的值是这个对象. 如果 function ...

  8. js在本地预览图片

    移动web <body> <form enctype="multipart/form-data" name="form1"> 上传文件: ...

  9. dedecms插件开发教程

    这是一个很简单插件实例,通过此插件,你可以知道怎么样开发一个插件,它结构是怎么设置的,数据库,后台等.文件结构:enroll.php 文件在 plus文件下enroll.htm文件在templets/ ...

  10. [简历] PHP 技能关键字列表

    本技能关键字列表是从最近招聘PHP的数百份JD中统计出来的,括号中是出现的词频.如果你的简历要投递给有机器(简历分选系统)和不如机器(不懂技术的HR)筛选简历环节的地方,请一定从下边高频关键词中选择5 ...