一、个相关的类及常用方法:
1、使用PreferenceActivity
public abstract class PreferenceActivityextendsListActivity implementsPreferenceManager.OnPreferenceTreeClickListener
该类为抽象类,使用时,从该类派生子类,既可以实现参数的管理。该类使用的是一个ListView的布局来呈现内容。
该类拥有一个PreferenceManager实例,用于从activity或者xml文件创建参数树。
2、参数管理器PreferenceManager
这个类用来帮助从activity或者xml文件创建参数树。
该类拥有一个SharedPreferences实例,这个实例指向了一些 由他管理的包含了这些参数值的文件。同时,也拥有一个SharedPreferences.Editor实例,该实例从SharedPreferences实例中获得,具有获取和修改参数值的功能。
3、几个常用的方法
PreferenceActivity.setPreferenceScreen(PreferenceScreen preferenceScreen)
作用:设置要显示的参数树的根,也即最上层的那个参数页。
返回值:无。
PreferenceActivity.getPreferenceScreen()
作用:获得这个activity所显示的 参数树的根。
返回值:PreferenceScreen句柄。
PreferenceActivity.addPreferencesFromResource(int preferencesResId)
作用:展开给定的xml资源文件,并将其中的参数树添加到当前的参数树中。
返回值:无。
PreferenceActivity.onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
作用:派生子类时重载该函数,以实现参数项点击时的操作。
返回值:boolean。
PreferenceActivity.findPreference(CharSequencekey)
作用:获取 指定关键字的参数项。每一个参数项在配置的时候,指定了一个key值,由该值可以匹配到 对应的参数项。
返回值:Preference对象。
PreferenceManager.getDefaultSharedPreferences(Context context)
作用:静态方法,获取一个SharedPreferences实例,该实例指向了在给定的context中被preference所使用的文件,这些文件保存了参数的信息。获得了SharedPreferences对象之后调用SharedPreferences.edit()可以获得一个Editor,通过Editor可以对参数值进行读取和修改。
返回值:SharedPreferences对象。
PreferenceManager.createPreferenceScreen(Context context)
作用:为指定的context创建一个PreferenceScreen实例并返回。使用这个实例可以从代码中手动的添加参数树。
返回值:PreferenceScreen对象。
getPreferenceScreen().removePreference(Preference preference); //这样 删除的是一级 节点
二、加载参数树:
加载参数树有两种模式,一是从xml文件导出,二是在代码中手动添加。
1、从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方法添加参数项。 |
创建参数元素时参数的 属性设置:
参数元素的属性设置方法可以参看android源代码,大部分均以“set”开头。xml文件中可以配置的属性,均可以使用代码来配置。
(3)提交参数树
创建好参数树后,调用PreferenceActivity.setPreferenceScreen(PreferenceScreen preferenceScreen)方法提交参数树,该参数树的内容就能够显示出来。
三、如何操作参数
如何操作参数,即如何读取和修改参数。使用PreferenceActivity派生的子类,在如下几个函数中添加操作。
重载的方法 |
要做的事情 |
onCreate |
加载参数树 |
onResume |
初始化、更新参数页面中参数值 |
onPause |
保存当前的参数值 |
onPreferenceChange |
实现的Preference.OnPreferenceChangeListener接口,在此处理一些参数发生了变化的事情,不必在此保存参数值,处理后返回true |
|
|
参数值的读取:
(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这种参数访问机制,不允许跨进程使用,每个应用有自己独立的参数数据文件。
(1)文件路径
系统运行时,应用的参数文件存在于如下路径:
data/data/packageName/shared_prefs
例如:
data/data/com.oppo.HanWangWriterIME/shared_prefs
导出以上的文件夹,在里面可以找到参数文件。该文件的命名规则为:
packageNam_preferences.xml
例如:com.oppo.HanWangWriterIME_preferences.xml