Android Preference使用

0介绍

  Android系统内的设置界面由Android Preference相关类提供,使用preference这个键值对的方式来自动保存这些数据,并即时生效,同时Android提供一种类似layout的方式来进行Preference的布局。其中,使用PreferenceScreen和PreferenceCategory对布局进行控制,设置子项包含以下种类: LListPreference,CheckBoxPreference,EditTextPreference,RingtonePreference,EditPhoneNumberPreference等。设置数据的保存和读取通过全局保存对象SharedPreferences

实现,保存时触发相应事件通过Preference.onPreferenceChangeListener

实现。下面分别介绍各类。

1 配置文件示例

配置功能xml示例
2 设置页面布局
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    <CheckBoxPreference android:key="music"        android:title="@string/music_title" android:summary="@string/music_summary"        android:defaultValue="true" />    <CheckBoxPreference android:key="hints"        android:title="@string/hints_title" android:summary="@string/hints_summary"        android:defaultValue="true" />    <PreferenceScreen android:key="detailSetting"        android:title="@string/detail_setting_title"         android:summary="@string/detail_setting_summary">        <CheckBoxPreference android:key="music1"            android:title="@string/music_title"             android:summary="@string/music_summary"            android:defaultValue="true" />        <CheckBoxPreference android:key="music2"            android:title="@string/music_title"             android:summary="@string/music_summary"            android:defaultValue="true" />    </PreferenceScreen>    <PreferenceScreen android:key="customSetting"        android:title="@string/custom_setting_title" android:summary="@string/custom_setting_summary">        <intent android:action="android.intent.action.MAIN"            android:targetPackage="com.rasa.game" android:targetClass="com.rasa.game.CustomSetting" />    </PreferenceScreen>    <com.rasa.game.CustomPreference            android:key="my_preference"            android:title="Advance Preference"            android:summary="You can custom design your prefrence UI"            android:defaultValue="100" />    </PreferenceScreen>  



2.1 PreferenceScreen

每一个设置界面就是一个PreferenceScreen,因此其xml配置文件到根节点是 PreferenceScreen,其内可包含 PreferenceScreen, PreferenceCategory,其他设置项如 ListPreference, CheckBoxPreference等。 此项包含的所有子项在新屏幕上显示,就好像进入二级菜单。

处于内层的PreferenceScreen被点击时,在新页面中显示其内的两个CheckBoxPreference选项。


view code
<PreferenceScreen android:key="detailSetting" android:title="@string/detail_setting_title" android:summary="@string/detail_setting_summary"> <CheckBoxPreference android:key="music1" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /> <CheckBoxPreference android:key="music2" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /></PreferenceScreen>
也可以设置内层PreferenceScreen的Intent属性,设置点击PreferenceScreen时跳转到com.android.phone.SelectSimCard页面。如:


View Code
<PreferenceScreen android:key="config_sub" android:title="@string/sel_sub_title" android:summary="@string/sel_sub_summary" android:persistent="false"> <intent android:action="android.intent.action.MAIN" android:targetPackage="com.android.phone" android:targetClass="com.android.phone.SelectSimCard" /></PreferenceScreen>
  

2.2 PreferenceCategory

PreferenceCategory 为设置选项类别,其内部包含一个或多个设置选项。如 PreferenceScreen, 其他设置项如 ListPreference, CheckBoxPreference等。

PreferenceCategory在设置界面上显示为一个类别标题。 PreferenceCategory是一个逻辑上的类别概念。


3 常用设置项

ListPreference 带下拉的设置项

CheckBoxPreference 带CheckBox的设置项

EditTextPreference 输入文本到设置项

RingtonePreference 铃声设置项

EditPhoneNumberPreference 号码设置项

…...


3.1 设置项属性

Key为这个Preference的ID,设置了才可以在代码中引用

Title是显示的标题

Summary是显示在标题下的文字介绍

Dependency:可用来配置此设置项是否依赖于其他配置项,如:填写一个CheckBoxPreference的Key,这样就会在填写的那个CheckBoxPreference勾选时当前这个Preference才可用

Default Value为初始值


4 自定义设置项

默认提供的设置项不能满足全部要求,因此,会根据需要对设置项进行自定义。

1)首先扩展Preference类,注意使用SharedPreferences对配置项进行保存。

2)定义此Preference类对应的layout

3)直接用标签引用此Preference。如:


View Code
<com.rasa.game.CustomPreference android:key="my_preference" android:title="Advance Preference" android:summary="You can custom design your prefrence UI" android:defaultValue="100" />
  

5 设置变化事件

6 设置的读取和保存

1.全局保存对象SharedPreferences

在android中,最简单的持久化数据的办法是使用Preferences API,获取preference对象有三种方式,都是通过Activity对象的方法,获取的是android.content.SharedPreferences对象实例。

getPreferences():获取到作用域是本Activity的preference

getSharedPreferences():获取到作用域是本应用程序的preference

getDefaultSharedPreferences():获取到全局作用域的preference

保存方式如下:

View Code
String STORE_NAME = "Settings"; SharedPreferences settings = getSharedPreferences(STORE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("sourceType", 0); editor.commit();  SharedPreferences实例是通过:

get方法获取对应键的值;

edit方法获取SharedPreferences.Editor对象

通过SharedPreferences.Editor的put方法写入键值对

保存需要commit方法

2.是否保存

Preference.setOnPreferenceChangeListener

通过在子类中调用此方法来设置监听,在变化后进行保存。

ListPreference继承于DialogPreference,对onDialogClosed函数进行了覆盖,代码如下:

View Code
@Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) {// 是否是ok按钮点击?----------------------------------------(A) String value = mEditText.getText().toString();// 获取EditText控件的内容 if (callChangeListener(value)) {// 应用层是否关注此值变化---------------------(C) setText(value);// 设置新的值--------------------------------------------------(D) } } }  

从以上可以看到,如果应用层允许保存用户设置的新值,则进行保存

其中(D)最终调用Preference类的setPersistentString()函数进行保存。

此函数可以从Preference.java的源码callChangeListener看到,看应用程序是否设置了

setOnPreferenceChangeListener,这个一般是继承的PerferenceActivity的类来调用一个listener或者自身,

如果没有没有设置 ,用户即忽略参数变化。

转载博客园:

http://archive.cnblogs.com/a/2172773/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,我不太了解Android偏好设置,但是我可以尝试帮助您找到正确的答案。 很高兴为您服务!我可以为您提供有关Android偏好设置的信息。Android Preference(安卓偏好设置)是一种用于管理应用程序设置的框架。它允许您在应用程序中创建一系列用户可见的设置,这些设置可以是键值对、列表、单选按钮等。 在Android应用程序中使用Preference框架可以使用户轻松地更改应用程序的设置,而无需了解复杂的代码或设置文件。您可以使用xml文件来定义偏好设置屏幕,也可以通过编程方式动态创建偏好设置屏幕。 在使用Preference框架时,您需要了解以下概念: 1. Preference:偏好设置的基本单元,它可以是一个复选框、单选框、列表等。 2. PreferenceScreen:偏好设置的屏幕,它是一个容器,可以包含多个Preference。 3. PreferenceCategory:Preference的分类,用于组织PreferenceScreen。 4. SharedPreferences:用于存储应用程序设置的接口,偏好设置框架会将用户更改的设置保存到SharedPreferences中。 以下是一个示例xml文件,用于定义一个简单的偏好设置屏幕: ``` <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Display settings"> <CheckBoxPreference android:key="notifications" android:title="Notifications" android:summary="Enable/disable notifications" android:defaultValue="true" /> <ListPreference android:key="language" android:title="Language" android:summary="Select your preferred language" android:entries="@array/language_entries" android:entryValues="@array/language_values" android:defaultValue="en" /> </PreferenceCategory> </PreferenceScreen> ``` 该xml文件定义了一个PreferenceScreen,包含一个PreferenceCategory和两个Preference。其中,一个是CheckBoxPreference,用于启用或禁用通知;另一个是ListPreference,用于选择语言。 要在应用程序中使用该偏好设置屏幕,您需要使用PreferenceFragment或PreferenceActivity。PreferenceFragment是一个Fragment,可以显示偏好设置屏幕,而PreferenceActivity是一个Activity,用于显示偏好设置屏幕。 以下是一个示例PreferenceFragment代码,用于显示上面定义的偏好设置屏幕: ``` public class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } ``` 您需要在Activity中使用FragmentManager来添加PreferenceFragment: ``` public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); } } ``` 这就是Android Preference框架的基本用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值