Android 中Preference作为布局的应用

java.lang.Object
   ↳ java.util.prefs.Preferences

目前在Android系统源码中,Setting模块中使用的就是Preference布局,而不是常用的View布局结构。现在我们来学习Preference在布局中的应用。

Preference 控件

它的应用效果与TextView 有点相似。但是使用方法却完全不同。

1.加载Preference布局:

   首先要使我们自定义的类去继承PreferenceActivity或PreferenceFragment(建议),然后在onCreate()方法中调用
addPreferencesFromResource(R.xml.mypreferences);
注意:mypreferences是我们自定的Preference布局,
在res/xml/mypreferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <Preference 
        android:key="preference"
        android:summary="123" 
        android:title="preference" >
    </Preference>
</PreferenceScreen>

2.Preference属性说明:
  android:key                   每个Preference控件唯一标识,通过它找到对应的Preference,相当于View中的“id”
  android:defaultValue   默认值。例如,CheckBoxPreference 默认值可选“true”,表示默认选中状态;
                                                                EditTextPreference 默认值写“110”,弹出的edit框中默认值为“110”
  android:enabled           表示该Preference控件是否可用状态
  android:title                  表示该Preference显示的大标题
  android:summary         表示该Preference显示的小标题
  android:persistent        表示Preference所对应的值是否写入sharedPreference的文件中,true表示写入,false表示不写入
  android:dependency    表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。
                                                       B可用, 则A可用;B不可用,则A不可用。写入的值为其他preference的key

3.Preference的跳转

   在Preference布局中存在两种方法进行跳转:
    A:在配置每个Preference控件的属性时,我们可以设置点击它时跳转的Intent。在xml中配置如下:

    <Preference
        android:key="preference"
        android:summary="小标题"
        android:title="大标题" >
        <intent
            android:targetClass="com.example.swiperefreshlayoutdemo.MainActivity"
            android:targetPackage="com.example.swiperefreshlayoutdemo" >
        </intent>
    </Preference>

    B:在方法onPreferenceTreeClick(),创建新的跳转Intent;
    注意:当上述两种方式同时存在时,则看onPreferenceTreeClick()的返回值,如果为true,表示消费该事件使用onPreferenceTreeClick()中的,如果为false时,表示不消费该事件,使用xml中配置的intent。

4.Preference的事件分析

    1:重写父类方法onPreferenceTreeClick(),点击时执行该方法。
    2:注册监听事件setOnPreferenceClickListener(),重写onPreferenceClick(),点击时执行该方法;
            当onPreferenceClick()返回为false,那么会先执行onPreferenceClick(),后执行onPreferenceTreeClick().
            当onPreferenceClick()返回为true,表示消费该事件,只会执行onPreferenceClick();
        注册监听事件setOnPreferenceChangeListener(),重写onPreferenceChange().
            当Preference的元素值发生改变时,执行该方法。当返回为false时,则不将新值写入sharedPreference文件,返回为true时,将新值写入sharedPreference文件中。

    补充:点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值,然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。


// 得到存储在Preferences值的对象,然后对其进行相应操作  
SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this);  
boolean apply_wifiChecked = shp.getBoolean("apply_wifi", false);  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值