今天我们来讲preferenceactivity的使用。我们先来认识一下它,看看它长什么样?呵呵,截图如下:

看到没?这就是preferenceactivity.看起来蛮眼熟的,在哪见过。呵呵,对,在我们得模拟器“设置”—>“无线和网络”中,就使用了这个。呵呵,下面来跟据一个项目实例,来讲述它的具体应用。
1、 创建android项目,命名为preferenceactivity。
2、 在values目录下新建一个array.xml文件,以备下面程序使用,该文件代码如下:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries">
<item>test1</item>
<item>test2</item>
<item>test3</item>
</string-array>
<string-array name="entriesvalue">
<item>1</item>
<item>2</item>
<item>3</item>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries">
<item>test1</item>
<item>test2</item>
<item>test3</item>
</string-array>
<string-array name="entriesvalue">
<item>1</item>
<item>2</item>
<item>3</item>
</resources>
3、 在res目录下新建一个xml目录,在里面新建一个preference.xml文件,该文件的具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<preferencescreen xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<preferencecategory android:title="我的位置">
<checkboxpreference
android:key="first"
android:title="飞行模式"
android:defaultvalue="true"
/>
android:key="second"
android:title="wi-fi"
android:summaryon="开启"
android:summaryoff="关闭"
<preference
android:key="third"
android:title="wi-fi设置"
android:summary="设置和管理无线接入点"
<listpreference
android:key="listpreference"
android:title="listpreference"
android:summary="listpreference测试"
android:dialogtitle="listpreference"
android:entries="@array/entries"
android:entryvalues="@array/entriesvalue"
<edittextpreference
android:key="edittextpreference"
android:title="edittextpreference"
android:summary="点击输入"
android:dialogtitle="输入设置"
/>
<ringtonepreference
android:key="ringtonepreference"
android:title="ringtonepreference"
android:summary="选择铃声"
/>
</preferencecategory>
</preferencescreen>
<preferencescreen xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<preferencecategory android:title="我的位置">
<checkboxpreference
android:key="first"
android:title="飞行模式"
android:defaultvalue="true"
/>
android:key="second"
android:title="wi-fi"
android:summaryon="开启"
android:summaryoff="关闭"
<preference
android:key="third"
android:title="wi-fi设置"
android:summary="设置和管理无线接入点"
<listpreference
android:key="listpreference"
android:title="listpreference"
android:summary="listpreference测试"
android:dialogtitle="listpreference"
android:entries="@array/entries"
android:entryvalues="@array/entriesvalue"
<edittextpreference
android:key="edittextpreference"
android:title="edittextpreference"
android:summary="点击输入"
android:dialogtitle="输入设置"
<ringtonepreference
android:key="ringtonepreference"
android:title="ringtonepreference"
android:summary="选择铃声"
</preferencecategory>
</preferencescreen>
4、 以上做好后,我们就只要修改程序中的部分代码了。首先,我们得让它继承自preferenceactivity的activity,然后在主程序中调用addpreferencesfromresource(r.xml.preference);就可以了。具体代码如下:
public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{
sharedpreferences prefs;
listpreference listpreference;//声明listpreference
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
addpreferencesfromresource(r.xml.preference);
//我们可以通过各个preference的key来得到preference的view,从而可以用它进行相关操作
listpreference=(listpreference)findpreference("listpreference");
string str=listpreference.getkey();
system.out.println(str);
/*preferenceactivity中的设置存储是完全自动的,你不需要再用代码去实现
* 设置的存储,preferenceactivity创建后会自动创建一个配置文件/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要获取该文件中的值,我们可以通过以下方式取得*/
prefs=preferencemanager.getdefaultsharedpreferences(this);
string value=prefs.getstring("listpreference", "xyz");
toast.maketext(this, value, toast.length_long).show();
}
public boolean onpreferencetreeclick(preferencescreen preferencescreen,
preference preference) {
// todo auto-generated method stub
if(preference.getkey().equals("third")){
//这里可以操作,实现界面的跳转
intent intent=new intent();
intent.setclass(this, runactivity.class);
startactivity(intent);
}
return super.onpreferencetreeclick(preferencescreen, preference);
//当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发
public void onsharedpreferencechanged(sharedpreferences sharedpreferences,
string key) {
}
public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{
sharedpreferences prefs;
listpreference listpreference;//声明listpreference
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
addpreferencesfromresource(r.xml.preference);
//我们可以通过各个preference的key来得到preference的view,从而可以用它进行相关操作
listpreference=(listpreference)findpreference("listpreference");
string str=listpreference.getkey();
system.out.println(str);
/*preferenceactivity中的设置存储是完全自动的,你不需要再用代码去实现
* 设置的存储,preferenceactivity创建后会自动创建一个配置文件/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要获取该文件中的值,我们可以通过以下方式取得*/
prefs=preferencemanager.getdefaultsharedpreferences(this);
string value=prefs.getstring("listpreference", "xyz");
toast.maketext(this, value, toast.length_long).show();
}
public boolean onpreferencetreeclick(preferencescreen preferencescreen,
preference preference) {
// todo auto-generated method stub
if(preference.getkey().equals("third")){
//这里可以操作,实现界面的跳转
intent intent=new intent();
intent.setclass(this, runactivity.class);
startactivity(intent);
return super.onpreferencetreeclick(preferencescreen, preference);
//当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发
public void onsharedpreferencechanged(sharedpreferences sharedpreferences,
string key) {
5、 到此我们得项目框架就已经搭建好了,单击执行便会得到我们以上的效果。
但是我们得任务还没完,下面的讲解才是本节的重点。学习preferenceactivity我们需要注意一下几点:
第一, preference下的view是有限的,只有下面几个:
checkboxpreference:checkbox选择项,对应的值的ture或flase
edittextpreference:输入编辑框,值为string类型,会弹出对话框供输入。
listpreference: 列表选择,弹出对话框供选择。
preference:只进行文本显示,需要与其他进行组合使用。
preferencecategory:用于分组。
ringtonepreference:系统玲声选择
第二,preferenceactivity布局中的一些属性。
android:key 唯一标识符。它对应保存的xml保存的配置文件中的节点的 name属性。android:defaultvalue 默认值,对应xml中的value属性的值。
android:title:显示标题(大字体显示)。
android:summary:副标题(小字体显示)。
android:dialogtitle:弹出对话框的标题
android:entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。
android:entryvalues:列表中实际保存的值,与entries对应。
第三,当preferenceactivity上的view有所更改时,系统会自动将对应的值更新到xml配置文件中,该文件可以在android 的 file explorer 中的 data/data/"yourpagename"/shared_prefs/"yourpagename"_prefenrences.xml中找到。“yourpagename”表示你项目所在的包。
第四,如何响应preferenceactivity操作。
其实,我们只要重写preferenceactivity的onpreferencetreeclick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。
到此,内容已经基本上剖析完全了。呵呵!