赞
踩
一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择,
这时候就可以使用Android提供的preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,
同时Android提供一种类似的layout的方式来进行Prefernce的布局。
下面来看一下Preference的各子控件;
CheckBoxPreference 参数勾选框。常用于使能开关
EditTextPreference 可编辑参数内容的文本框
ListPreference 以列表来呈现参数内容并提供选择参数操作的对话框。
RingtonePreference —— 铃声
PreferenceCategory :参数域,可以将一系列的参数归到同一个范围内,表示同类或近似功能的参数。类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。一个参数页面中可以包含多个参数域。参数域可以加说明标题
PreferenceScreen : 所有Preference元素的根节点。相当于一个参数页面,在一个参数页中可以嵌入一个或多个不同的PreferenceScreen,这个参数页也可以是启动其它的页面如activity页面。
使我们的Activity继承PreferenceActivity,然后在onCreate()方法中通过
addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。
android:key : 每个Preference控件独一无二的”ID”,唯一表示此Preference。
android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;
EditTextPreference的默认值可为”110” 。
android:enabled : 表示该Preference是否可用状态。
android:title : 每个Preference在PreferenceScreen布局上显示的标题——大标题
android:summary : 每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)
android:persistent: 表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;
否则,则表示不写入该Preference元素的值。
android:dependency: 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。
B可用,则A可用;B不可用,则A不可用。
android:disableDependentsState: 与android:dependency相反。B可用,则A不可用;B不可用,则A可用。
常用的方法则包括:
getKey() setKey()
getSummary() setSummary()
getText()setText()
getXXX()代表取得xxx属性的值。
接下来看一下相关的类;
1、使用PreferenceActivity
public abstract class PreferenceActivity extends ListActivity implements
PreferenceManager.OnPreferenceTreeClickListener
该类为抽象类,使用时从该类派生子类,既可以实现参数的管理。该类使用的是一个ListView的布局来呈现内容。
该类拥有一个PreferenceManager实例,用于从activity或者xml文件创建参数树。
2、参数管理器PreferenceManager
这个类用来帮组从activity或者xml文件创建参数树。
该类拥有一个SharedPreferences实例,这个实例指向了一些由他管理的包含了这些参数值的文件。同时,也拥有一个SharedPreferences.Editor实例,该实例从SharedPreferences实例中获得,具有获取和修改参数值的功能。
加载参数树有两种模式,一是从xml文件导出,二是在代码中手动添加。
1、从xml文件导出
参数树在xml文件中如何配置,配置参数的xml文件可以放在工程目录的res/xml中。
借助于PreferenceActivity,从它派生子类,并实现Preference.OnPreferenceChangeListener接口。在子类的onCreate方法中,通过调用:
PreferenceActivity.addPreferencesFromResource(int preferencesResId)从指定的参数资源文件中导出参数树。这个参数树由父类PreferenceActivity管理,使用起来很方便。
通过调用:
PreferenceActivity.getPreferenceScreen()可以获得导出的参数树的根对象。
调用PreferenceActivity.findPreference(CharSequence key)可获得指定名字的参数项。
2、使用代码手动添加
从PreferenceActivity派生一个子类,在该子类的onCreate方法中手动添加参数树。
(1)、获得参数树的根Preference;
getPreferenceManager().createPreferenceScreen(context).
(2)、按参数树的层级关系,创建参数元素,并添加到参数树的对应位置中。
添加使用到方法:PreferenceGroup.addPreference(Preference preference)。参数元素的类级别关系如下:
PreferenceGroup及其子类可以使用addPreference方法添加参数项。 |
创建参数元素时参数的属性设置:
参数元素的属性设置方法可以参看代码,大部分均以“set”开头。xml文件中可以配置的属性,均可以使用代码来配置。
(3)、提交参数树
创建好参数树后,调用PreferenceActivity.setPreferenceScreen(PreferenceScreen preferenceScreen)方法提交参数树,该参数树的内容就能够显示出来。
参数值的读取:
(1)、获取对应的SharedPreferences实例:
调用SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(Context context)获得。
(2)、使用pre读取参数值:
读取的方法,大多以“get”开头,可以传入默认值。如:
int mWriteColor = pre.getInt("WriteColor", 0xFFFF0000);
如果没有该参数,则返回默认值0xFFFF0000。
参数值的保存:
(1)、获取参数值访问接口:
Editor editor = mSharedPref.edit();
其中,mSharedPref为SharedPreferences实例,该实例可以通过PreferenceManager.getDefaultSharedPreferences(Context context)获得;
(2)、写参数值:
通过editor所提供的方法保存参数值,如
editor.putBoolean(KEY_NAME_KEY_SOUND, mKeySound);
是将参数值mKeySound以索引名KEY_NAME_KEY_SOUND保存到SharedPreferences实例所维护的一个数据文件中。
更多接口方法参看代码。
(3)、提交:
只有在设置好了参数值后并调用如下的方法,最终的参数值才会被保存起来。
editor.commit();
简单的Preference例子:
例子来自http://blog.csdn.net/flowingflying/article/details/6671548
步骤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);
}
}
步骤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的返回值
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。