Preference的 相关类 及 常用方法

      前几篇博客 介绍的参数的xml配置中所使用到的一些参数标签,其实都是一些系统中实现好的类,他们负责参数的呈现及相关操作,所以,我们也可以在代码中创建参数元素并进行配置。

 

一、个相关的类及常用方法

 

1、使用PreferenceActivity

public abstract class PreferenceActivityextendsListActivity implements PreferenceManager.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

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Preference 是 Android 中的一种轻量级的持久化存储机制,可以用来存储应用程序的各种设置和配置信息。在使用 Preference 时,可以通过简单的键值对来存储和读取数据,同时这些数据在应用程序退出后仍然可以保持不变,即实现了数据的持久化存储。 Preference 可以通过 XML 文件来定义,通常包括 PreferenceScreen、PreferenceCategory、CheckBoxPreference、EditTextPreference、ListPreference 等几种型。其中,PreferenceScreen 是一个根元素,用来包含所有的 Preference,PreferenceCategory 用来将 Preference 分组,CheckBoxPreference 表示复选框,EditTextPreference 表示文本输入框,ListPreference 表示下拉列表框等。 使用 Preference 的步骤通常如下: 1. 定义一个 XML 文件,用来描述 Preference 的结构和属性; 2. 在 Activity 中通过 PreferenceFragment 或 PreferenceActivity 加载该 XML 文件; 3. 在代码中通过 SharedPreferences 对象来获取和设置 Preference 中的键值对。 例如,以下是一个简单的 Preference XML 文件: ```xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Display settings"> <CheckBoxPreference android:key="show_images" android:title="Show images" android:summary="Whether to show images in the app" android:defaultValue="true" /> <ListPreference android:key="font_size" android:title="Font size" android:summary="Select the font size" android:entries="@array/font_sizes" android:entryValues="@array/font_sizes_values" android:defaultValue="16sp" /> </PreferenceCategory> <PreferenceCategory android:title="User settings"> <EditTextPreference android:key="username" android:title="Username" android:summary="Enter your username" android:dialogTitle="Enter your username" /> </PreferenceCategory> </PreferenceScreen> ``` 在 Activity 中加载该 XML 文件的方法如下: ```java public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); } } ``` 在代码中获取和设置 Preference方法如下: ```java SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); boolean showImages = preferences.getBoolean("show_images", true); String fontSize = preferences.getString("font_size", "16sp"); String username = preferences.getString("username", ""); ``` 其中,PreferenceManager.getDefaultSharedPreferences() 方法可以获取一个默认的 SharedPreferences 对象,通过该对象可以获取和设置 Preference 中的键值对。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值