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.
@Override
09.
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.
<header
22.
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
PreferenceActivity
16.
{
17.
@Override
18.
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.
@Override
32.
public
void
onBuildHeaders(List<Header> target)
33.
{
34.
// 加载选项设置列表的布局文件
35.
loadHeadersFromResource(R.xml.preference_headers, target);
36.
}
37.
38.
public
static
class
Prefs1Fragment
extends
PreferenceFragment
39.
{
40.
@Override
41.
public
void
onCreate(Bundle savedInstanceState)
42.
{
43.
super
.onCreate(savedInstanceState);
44.
addPreferencesFromResource(R.xml.preferences);
45.
}
46.
}
47.
public
static
class
Prefs2Fragment
extends
PreferenceFragment
48.
{
49.
@Override
50.
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.
<RingtonePreference
06.
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.
<EditTextPreference
16.
android:key=
"name"
17.
android:title=
"填写用户名"
18.
android:summary=
"填写您的用户名(测试EditTextPreference)"
19.
android:dialogTitle=
"您所使用的用户名为:"
/>
20.
<!-- 通过列表框选择性别 -->
21.
<ListPreference
22.
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.
<CheckBoxPreference
31.
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.
<PreferenceScreen
04.
<PreferenceCategory android:title=
"背景灯光组"
>
05.
<!-- 通过列表框选择灯光强度 -->
06.
<ListPreference
07.
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.
<SwitchPreference
17.
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"?> < ...
随机推荐
- 第 1 章 策略模式【Strategy Pattern】
第 1 章 策略模式[Strategy Pattern] 以下内容出自: 24种设计模式介绍与6大设计原则.pdf 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手 ...
- 想学ps的,这全是精华,拿走不谢!!!
- sap中用函数增加断点(break point)
如果在增强程序中,每次调试都要去程序里面设置断点很麻烦,为了解决这个问题,可以用下面的两个方法: 1: if sy-uname eq 'XXXX' "XXX 为账号名字 break ...
- ABAP写的一个递归
需求:计算下面树形结构中每个子节点与最上层父节点的对应关系. DATA:BEGIN OF lt_ztab OCCURS 0, a TYPE string, b TYPE str ...
- 【Earthquake, 2001 Open 】 0-1 分数规划
71 奶牛施工队一场地震把约翰家园摧毁了,坚强的约翰决心重建家园.约翰已经修复了 N 个牧场,他需要再修复一些道路把它们连接起来.碰巧的是,奶牛们最近也成立了一个工程队,专门从事道路修复.而然,奶牛 ...
- go与rpc
Go语言的RPC介绍(含Protobuf-RPC) http://www.open-open.com/lib/view/open1389251727289.html
- 心愿:做一个精简版MFC
我觉得自己有能力看懂MFC的C++代码和总体流程,但是由于MFC混杂了太多的东西,比如OLE等等不必要的东西,又做了无数的ASSERT判断,影响整体流程的理解.因此我要做一个精简版的MFC,而且能用它 ...
- QWidget与HWND的互相转换
QWidget与HWND的互相转换 在编写Windows的应用程序时,我们有时不可避免地要与Windows平台固有的Win32 API打交道,但是Win32 API里面常常用到的HWND等诸多句柄QT ...
- Google 发布 Android 性能优化典范
2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...
- bzoj2434
利用了bzoj3172提到的性质,x串在y串中的出现的次数即为在fail树上以x结尾节点为根的子树中有多少个节点在y串上所以很明显我们要离线解决,我们先把询问按y分类存起来然后我们顺着操作顺序来,出现 ...