步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫set.xml
步骤2:set.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>
步骤3:
public class Chapter21Test1 extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.c21preference);
}
}
获取preferences可以通过三种方式:
一、getPreferences():可以获取同一activity中的preference;
二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使
用SharePreferences prefs = getSharedPreferences(
"com.wei.android.learning_preferences"
,0);其中第一个参数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们例子的方式,通过Android的偏好管理器来获取其所管理的preferences。
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的返回值
Preferenece数据的操作
在上面的例子中,preference的数值会被保留,而且可以 在其他的activity中读取。如果需要清除数据,可以通过remove()清除某个名字的prefernece,clear()清除所有的 preferences。我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保 存。
<PreferenceCategory android:title="Other Preferences"> //分组
<EditTextPreference android:key="text" //变量名称
android:title="Text Entry Dialog" //弹出框提示
android:summary="Click to pop up a field for entry" //简介
android:dialogTitle="Enter something useful"/> // 弹出框标题
<ListPreference android:key="list"
android:title="Selection Dialog"
android:summary="Click to pop yo a list for select"
android:entries="@array/cities" //显示列表
android:entryValues="@array/airport_codes" //对应的值
android:dialogTitle="Choose a City"/>
</PreferenceCategory>
值改变事件
public class set extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.set);
PreferenceScreen prefSet = getPreferenceScreen();
ListPreference syncIntervalList = (ListPreference) prefSet.findPreference("list");
CheckBoxPreference CheckBoxPreference = (CheckBoxPreference) prefSet.findPreference("checkbox");
final PreferenceCategory PreferenceCategory = (PreferenceCategory) prefSet.findPreference("zz");
CheckBoxPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.equals(false)){
PreferenceCategory.setEnabled(false);
}else
{
PreferenceCategory.setEnabled(true);
}
return true;
}
});
syncIntervalList.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String s=newValue.toString();
Toast.makeText(getBaseContext(), s, 3).show();
return true;
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:key="checkbox"
android:title="是否同步"
android:summary="Check it on , check it off"/>
<PreferenceCategory
android:key="zz"
android:title="Other Preferences"
android:enabled="false"
>
<EditTextPreference android:key="text"
android:title="Text Entry Dialog"
android:summary="Click to pop up a field for entry"
android:dialogTitle="Enter something useful"/>
<ListPreference android:key="list"
android:title="Selection Dialog"
android:summary="Click to pop yo a list for select"
android:entries="@array/cities"
android:entryValues="@array/airport_codes"
android:dialogTitle="Choose a City"/>
</PreferenceCategory>
</PreferenceScreen>