例子:preference.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="退出时自动清空缓存" >
<CheckBoxPreference
android:title="退出时自动清空缓存"
android:defaultValue="true"
android:key="checkbox_clear"
android:summaryOff="功能: 关闭"
android:summaryOn="功能: 开启" />
</PreferenceCategory>
<PreferenceCategory android:title="下载图片" >
<ListPreference
android:dialogTitle="选择环境"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
android:key="ListPreference"
android:title="图片下载方式" />
</PreferenceCategory>
<PreferenceCategory android:title="云端推送" >
<CheckBoxPreference
android:title="是否开启云端推送"
android:defaultValue="true"
android:key="checkbox_open"
android:summaryOff="功能: 关闭"
android:summaryOn="功能: 开启"/>
<EditTextPreference
android:dialogTitle="间隔时间设置"
android:key="EditTextPreference"
android:summary="点击输入" android:defaultValue="8"
android:dependency="checkbox_open"
android:title="间隔时间设置" />
<RingtonePreference
android:key="RingtonePreference"
android:summary="选择铃声"
android:dependency="checkbox_open"
android:title="铃声设置" />
</PreferenceCategory>
</PreferenceScreen>
Activity代码:
public class SetActivity extends PreferenceActivity {
SharedPreferences mPreferences;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 所的的值将会自动保存到SharePreferences
addPreferencesFromResource(R.xml.preferences);
mPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
preference
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
String key = preference.getKey();
if (key.equals("checkbox_clear")) {
System.out.println("changes"+mPreferences.getBoolean("checkbox_clear", false));
preference.setDefaultValue(false);
}
if(key.equals("list_pic")) {
System.out.println("changes+"+array[Integer.parseInt((String) newValue)-1]);
}
return true;
}
});
return true;
}
}
XML中参数详解:
容器:
- PreferenceGroup 可以为多个Preference定义一个组,PreferenceCategory, PreferenceScreen为它的子类。
- PreferenceCategory 同样可以包含多个Preferneces ,如果该组被Disable时,可以提供一个标题。
- PreferenceScreen 为 Preferences层次结构的根元素,PreferenceScreen可以实现嵌套。内层的PreferenceScreen将会使用一个新的屏幕显示,有点类似于Word中的分页功能。
PreferenceGroup 可以为多个Preference定义一个组,PreferenceCategory, PreferenceScreen为它的子类。PreferenceCategory 同样可以包含多个Preferneces ,如果该组被Disable时,可以提供一个标题。PreferenceScreen
为 Preferences层次结构的根元素,PreferenceScreen可以实现嵌套。内层的PreferenceScreen将会使用一个新的屏幕显示,有点类似于Word中的分页功能。
组件:
- CheckBoxPreference 使用Checkbox 来显示某个配置项。
- EditTextPreference 使用文本框来显示某个牌子项,允许接受用户输入文本。
- ListPreference 使用一组单选钮 (列表)可以从中选择某一项。
- MultiSelectListPreference 使用一组Checkbox,允许该配置项有多值。
- RingtonPreference 允许用户从选取某个铃声
几个特别的属性:
1、android:dependency=key
从属于谁 后面跟的为android:key的值
只有在Parent preference选中时,子Preference 才可以配置,否则子Preference 被Disabled,显示为灰色。
2、android:defaultValue=“”
在XML中定义Preference的缺省值。
注意:
CheckBoxPreference:通过true或者false来设置初始值
- android:defaultValue=”true”
android:defaultValue=”true”
EditTextPreference:通过字符串来设置初始值
- android:defaultValue=”@string/default_value_edittext_preference”
android:defaultValue=”@string/default_value_edittext_preference”
ListPreference:通过value的值 也就是android:entryValues来设置初始值
- android:defaultValue=”@string/default_value_list_preference”
android:defaultValue=”@string/default_value_list_preference”