Android Preference详解

本文详细介绍了Android中的Preference,包括其家庭元素的介绍,XML配置方式以及具体的代码实现,帮助开发者更好地理解和使用这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

代表着一种基本的Preference的UI构件
当指定使用XML的层次架构的时候,每一个元素都是preference的子类,跟视图的层次跟布局类似
这个类中包含一个Key值,这个key值跟SharedPreference的存储键有关系(自己能够储存用户的行为偏好)
Android系统会将Preference元素的值存储在sharedPreference文件中。该文件存放路径位于
DDMS视图下的data/data/[packgename]/shared_prefs/文件下,命名约定为:packagename_preferencse.xml。
在Android系统源码中,绝大多数应用程序的UI布局采用了Preference的布局结构,而不是我们平时在模拟器中构建
应用程序时使用的View布局结构。这种布局的好处是:布局界面的可控性和高效率以及可存储值的简洁性

家庭元素介绍

单一元素:
Preference              文本框
CheckPreference         单选框
EditTextPreference      输入框
ListPreference          列表框
RingtonePreference      铃声

组合控件:
PreferenceCategory :类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。
PreferenceScreen  : 所有Preference元素的根节点。

Preferenece XML

在res/xml/下加入我们的preference XML文件
例子:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:widgetLayout="@layout/my_checkbox"
        android:defaultValue="false"
        android:key="boolean_value"
        android:summary="保存一个boolean值"
        android:title="Checkbox" />
    <EditTextPreference
        android:key="My_Eidt"
        android:summary="这是输入框"
        android:title="你看着办啊"/>
    <Preference
        android:key="text"
        android:summary="文本"
        android:title="我是文本"/>
</PreferenceScreen>

属性值:
android:key:key:唯一标识,SharedPreferences也将通过此Key值进行数据保存,也可以通过key值获取保存的信息 。          
android:defaultValue:默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态。

android:enabled :表示该Preference是否可用状态。     
android:title :每个Preference在PreferenceScreen布局上显示的标题——大标题  
android:summary :每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)
android:persistent:表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;
                    否则,则表示不写入该Preference元素的值。
android:layout:在一个preferenceactivity的偏好布局 用于填充view
android:dependency:表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;
                    B不可用,则A不可用。
android:icon: 偏好图标对于偏好选择图标必须是一个引用到另一个资源的形式或以packagetypename 主题属性.
android:disableDependentsState:与android:dependency相反。B可用,则A不可用;B不可用,则A可用。
android:order:表示偏好顺序,对于偏好较低的值的顺序是先点如果不指定默认的排序将字母必须是一个整数,如100,
            这也可能是一个参考值在含有这类这相当于全局属性资源符号秩序的形式或 形式packagetypename主题属性的一个资源。
android:shouldDisableView:是否被禁用,这种偏好是必须是布尔值true或false 这也可能是一个参考的形式或主题属性
                            packagetypename资源,packagetypename形式包含一个值   相当于全局属性资源符号shoulddisableview相关方法

android:selectable:偏好是否是可选的。
android:widgetLayout:可以做小部部件部分的布局。
android:fragment:  使用时,可以碎片化PreferenceActivity。

代码实现

Android 3.0以下版本,必须让Activity继承PreferenceActivity类来构建。  高于或等于android 3.0版本 使用PreferenceFragment。
然后在onCreate()方法中通过addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。

获取preferences:(里面传入的是我们在xml里面定义的key)
Preference wechatPref = findPreference(Config.KEY_ENABLE_WECHAT);

Preference的跳转:
第一种方法:可以在xml文件中配置
<Preference
    android:key="wifi_setting"
    android:summary="设置和管理无线接入点"
    android:title="Wi-Fi设置">
    <!-- 点击时 自定义一个默认跳转Intent  action指定隐式Intent -->
    <!-- action指定隐式Intent ; targetPackage和targetClass指定显示Intent-->
    <intent
        android:action="com.example.action.seemAction"
        android:targetClass="com.example.mypreference.MainActivity"
        android:targetPackage="com.example.mypreference" />
</Preference>
第二种方法:
就是在监听事件里面正常跳转就可以了

Preferenece数据的操作:
SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
可以通过remove()清除某个名字的prefernece,
clear()清除所有的preferences。
我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保存。

监听事件:
 public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
       说 明 : 当Preference控件被点击时,触发该方法。
       参数说明: preference 点击的对象。
       返回值:   true  代表点击事件已成功捕捉,无须执行默认动作或者返回上层调用链。 例如,不跳转至默认Intent。
             false 代表执行默认动作并且返回上层调用链。例如,跳转至默认Intent。
Preference.OnPreferenceChangeListener     该监听器的一个重要方法如下:
    boolean onPreferenceChange(Preference preference,Object objValue)
       说明:  当Preference的元素值发送改变时,触发该事件。
       返回值:true  代表将新值写入sharedPreference文件中。
                 false 则不将新值写入sharedPreference文件
Preference.OnPreferenceClickListener      该监听器的一个重要方法如下:
     public booleanonPreferenceClick(Preference preference)
         说明:当点击控件时触发发生,可以做相应操作。

那么当一个Preference控件实现这两个接口时,当被点击或者值发生改变时,触发方法是如何执行的呢?事实上,
它的触发规则如下:
  1 先调用onPreferenceClick()方法,如果该方法返回true,则不再调用onPreferenceTreeClick方法 ;
   如果onPreferenceClick方法返回false,则继续调用onPreferenceTreeClick方法。
  2 onPreferenceChange的方法独立与其他两种方法的运行。也就是说,它总是会运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值