Preference的使用
来源:互联网 发布:ios 10 更新 丢失数据 编辑:程序博客网 时间:2024/05/21 09:02
Preference直译为偏好,博友建议翻译为首选项。一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,同时Android提供一种类似的layout的方式来进行Prefernce的布局。
一个简单的Preferenece例子
步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫c21preference.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的例子体验,而PreferenceScreen就是最平白和基础的方式 -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 有四个基本组建,这个例子学习两个。里面的内容对照图,很容易理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
<CheckBoxPreference android:key="checkbox"
android:title="CheckBox Preference"
android:summary="Check it on , check it off"/>
<RingtonePreference android:key="ringtone"
android:title="Ringtone Preference"
android:showDefault="true"
android:showSilent="true"
android:summary="Pick a tone, any tone"/>
</PreferenceScreen>
步骤2:在java源代码中调用该xml,生成相应的preference界面
public class Chapter21Test1 extendsPreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.c21preference);
}
}
和用layout方式一样,代码很简单。和以往界面最大的区别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依然保留,我们重新向模拟器load应用,发现之前的选项仍然存在。我们可以利用preference,而无须人工对数据进行保存和读取,很是方便。
步骤3:获取preference的数据
处了在preference的界面中可以保留数据,我们也希望能够读出数据,以便这些数据可以用在其他的activity中。如果另一个activity和这些数据关联,而且希望能够实时进行同步,在onResume()中对preference保留的数据进行读取,而后进行相关的更新。
首先要获取preferences,然后通过键值对的获取方式根据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,例如:
protected void onResume() { //在另一个Activity中
super.onResume();
SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
}
获取preferences可以通过三种方式:
一、getPreferences():可以获取同一activity中的preference;
二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们例子的方式,通过Android的偏好管理器来获取其所管理的preferences。
Preferenece数据的操作
在上面的例子中,preference的数值会被保留,而且可以在其他的activity中读取。如果需要清除数据,可以通过remove()清除某个名字的prefernece,clear()清除所有的preferences。我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保存。
Preferenece XML
Preference的XML可以通过PreferenceCategory来进行组织。PreferenceCategory可以将几个组建组合在一起,并加上标题。我们依然用前面的xml例子,通过PreferenceCategory来进行组织,如下:和之前的例子比较,将chekcbox和rintong组织成为一个category,并加上了"simple Preferences"的标题。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Simple Preferences">
<CheckBoxPreference android:key="checkbox" ..../>
<RingtonePreference android:key="ringtone" ... />
</PreferenceCategory>
</PreferenceScreen>
PreferenceCategory也可以嵌套PreferenceScreen,PreferenceScreen中的内容,将通过另一屏来显示,我们在上面例子后面添加一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现,点击后新的一屏,由入PreferenceScreen定义。通过这个关系,我们可以组织自己的preference架构。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Simple Preferences">
<CheckBoxPreference android:key="checkbox" ..../>
<RingtonePreference android:key="ringtone" ... />
</PreferenceCategory>
<PreferenceCategory android:title="Detail Screens">
<PreferenceScreen android:title="Detail"
android:summary="Addtional preference help in another page">
<CheckBoxPreference android:key="checkbox2"
android:title="Another Checkbox"
android:summary="On or Off, It's a problem...."/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
在前面的例子中我们使用了CheckBox和Ringtong,在下面的例子,我们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的例子我们继续增加内容
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen ...>
......
<PreferenceCategory android:title="Other Preferences">
<EditTextPreference android:key="text"
android:title="Text Entry Dialog"
android:summary="Click to pop up a field for entry"
android:dialogTitle="Enter something useful"/>
<ListPreference android:key="list"
android:title="Selection Dialog"
android:summary="Click to pop yo a list for select"
android:entries="@array/cities"
android:entryValues="@array/airport_codes"
android:dialogTitle="Choose a City"/>
</PreferenceCategory>
</PreferenceScreen>
在list中由两个引用@array/cities和@array/airport_codes,我们在资源文件中定义此两array。内容如下:
<resource>
<string-array>
<item>Pittsburgh</item>
<item>Allentown/Bethlehem</item>
<item>Erie</item>
... ...
</string-array>
<string-array name="airport_codes">
<item>PHL</item>
<item>PIT</item>
<item>ABE</item>
... ...
</string-array>
</resources>
运行结果如右图所示。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的情况稍微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,如果我们去获取preference的值,在这个例子为prefs.getString("list", "<unset>");,则返回在entryValues对应的数值,例如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一对应的。
补充:PrefeneceActivity都提供了哪几种元素可供使用。点击Add按钮,在打开的新窗口中可以看到以下几项:
1. CheckBoxPreference:CheckBox选择项,对应的值的ture或flase。如图:
2. EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。如图:
3. ListPreference: 列表选择,弹出对话框供选择。如图:
4. Preference:只进行文本显示,需要与其他进行组合使用。
5. PreferenceCategory:用于分组。效果如下:
6. PreferenceScreen:PreferenceActivity的根元素。
7. RingtonePreference:系统玲声选择。
下面我们来分析各个节点的属性:
PreferenceCategory属性分析:
title:显示的标题
key:唯一标识(至少在同一程序中是唯一),SharedPreferences也将通过此Key值进行数据保存,也可以通过key值获取保存的信息 (以下相同)
CheckBoxPreference属性分析:
Key:唯一标识
title:显示标题(大字体显示)
summary:副标题(小字体显示)
defaultValue:默认值(当然,此处只能是true或false了)
Preference属性分析: Key:唯一标识.
title:显示标题(大字体显示)
summary:副标题(小字体显示)
dependency:附属(嘛意思),即标识此元素附属于某一个元素(通常为CheckBoxPreference),dependency值为所附属元素的key。上面代码中的Preference元素附属于key等于“apply_bluetooth”的CheckPreference元素,当CheckPreference值为true时,Preference则为可用,否则为不可用。
EditTextPreperence属性分析
Key:唯一标识.
title:显示标题(大字体显示)
ListPreference属性分析:
Key:唯一标识.
title:显示标题(大字体显示)
dialogTitle:弹出对话框的标题
entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。
entryValues:列表中实际保存的值,也entries对应。为一个数组,通读通过资源文件进行设置。以下代码显示的是arrays.xml文件中内容:
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
resources
>
03
<
string-array
name
=
"department"
>
04
<
item
>综合部</
item
>
05
<
item
>外贸部</
item
>
06
<
item
>行政部</
item
>
07
</
string-array
>
08
<
string-array
name
=
"department_value"
>
09
<
item
>001</
item
>
10
<
item
>002</
item
>
11
<
item
>003</
item
>
12
</
string-array
>
13
</
resources
>
RingtonePreference 属性分析
铃声(暂时没有用到过),暂时略过。
如何响应PreferenceActivity的操作
只要重写PreferenceActivity的 onPreferenceTreeClick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。代码如下:
1
@Override
2
public
boolean
onPreferenceTreeClick(PreferenceScreen preferenceScreen,
3
Preference preference) {
4
// TODO Auto-generated method stub
5
return
super
.onPreferenceTreeClick(preferenceScreen, preference);
6
}
- Android--Preference的使用
- preference的使用
- Preference的使用
- Preference的使用
- Preference的使用
- Preference的使用
- Android-------Preference的使用
- Preference的使用
- Android Preference的使用
- Android中Preference的使用
- Android中preference的使用
- Android的Preference使用-1
- Android中preference的使用
- Android中preference的使用
- Android中preference的使用
- Android中preference的使用
- Preference 的xml使用 小结
- android中Preference的使用
- UVA12086 Potentionmeters 线段树
- 怎么改变uisearchbar中的cancel按钮的文字
- R 中字符串的连接使用paste函数
- 网页头部<meta name="Robots" 用法 <meta系列用法.
- 导入MySQL脚本生成SQL语句
- Preference的使用
- C# 中的委托和事件
- 在listview中,实现_分页加载_异步加载
- 想给他妹妹每人再补贴一千镑的收入
- socket编程的简要介绍
- Use a layout_height of 0dip instead of 700dp for better performance
- 修改UISearchBar背景颜色
- ThreadLocal解析
- MySql常用命令总结!!!!!!!!!!!