Android学习笔记(四十):Preference的使用 (转http://blog.csdn.net/flowingflying/article/details/6671548)

Coordinator
Jun 15, 2012 at 1:46 AM

Preference直译为偏好,博友建议翻译为首选项。一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,同时Android提供一种类似的layout的方式来进行Prefernce的布局。

<big>一个简单的Preferenece例子</big>

步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫c21preference.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的例子体验,而PreferenceScreen就是最平白和基础的方式 -->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
   
<!-- 有四个基本组建,这个例子学习两个。里面的内容对照图,很容易理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
    <CheckBoxPreference android:key="
checkbox"
        android:title="
CheckBox Preference"
        android:summary="
Check it on , check it off"/>
    <RingtonePreference android:key="
ringtone"
        android:title="
Ringtone Preference"
        android:showDefault="
true"
        android:showSilent="
true"
        android:summary="
Pick a tone, any tone"/>
</PreferenceScreen>

步骤2:在java源代码中调用该xml,生成相应的preference界面

public class Chapter21Test1 extendsPreferenceActivity{
  
 @Override
    protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.c21preference);
    }
}

步骤3:获取preference的数据

处了在preference的界面中可以保留数据,我们也希望能够读出数据,以便这些数据可以用在其他的activity中。如果另一个activity和这些数据关联,而且希望能够实时进行同步,在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

首先要获取preferences,然后通过键值对的获取方式根据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,例如:

    protected void onResume() { //在另一个Activity中
       
super.onResume();
        SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
        System.out.println(new Boolean(prefs.getBoolean("
checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
        System.out.println(prefs.getString("
ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
    }

获取preferences可以通过三种方式:
一、getPreferences():可以获取同一activity中的preference;
二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们例子的方式,通过Android的偏好管理器来获取其所管理的preferences。