您的位置:首页 > 移动开发 > Android开发

Android 中Preference作为布局的应用

2015-12-16 22:15 375 查看
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.[b]Preference的跳转[/b]

 
 在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);  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: