preference_setting.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<PreferenceCategory android:title="我的位置源" >
<CheckBoxPreference
android:key="wireless_network"
android:summary="使用无线网络查看应用程序(例如Google地图)中的位置"
android:title="使用无线网络" />
<CheckBoxPreference
android:key="gps_statellite_setting"
android:summary="定位时,精确到街道级别(取消选择可节约电量)"
android:title="启用GPS卫星设置" />
</PreferenceCategory>
<PreferenceCategory android:title="个人信息设置" >
<CheckBoxPreference
android:key="yesno_save_individual_info"
android:title="保存个人信息" />
<EditTextPreference
android:key="individual_name"
android:summary="请输入真实姓名"
android:title="姓名" />
<PreferenceScreen
android:key="other_individual_msg"
android:summary="是否工作、手机"
android:title="其他个人信息" >
<CheckBoxPreference
android:key="is_an_employee"
android:title="是否工作" />
<EditTextPreference
android:key="mobile"
android:summary="请输入真实的手机号"
android:title="手机" />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
PreferenceTestActivity.java
/**
*
*/
package com.confidant.projects;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
/**
* @author xuhaixin
*
*/
public class PreferenceTestActivity extends PreferenceActivity implements
OnPreferenceChangeListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 改变PreferenceActivity保存数据使用的XML文件的名称
getPreferenceManager().setSharedPreferencesName("setting");
// 装载preference_setting.xml文件
addPreferencesFromResource(R.xml.preference_setting);
// 获得“姓名”列表项对应的Preference对象
Preference individualNamePreference = findPreference("individual_name");
// 获得指向setting.xml文件的的SharedPreferences对象
SharedPreferences sharedPreferences = individualNamePreference
.getSharedPreferences();
// 设置“姓名”列表项的summary
individualNamePreference.setSummary(sharedPreferences.getString(
"individual_name", ""));
// 设置“姓名”列表项的是否可用
if (sharedPreferences.getBoolean("yesno_save_individual_info", false))
individualNamePreference.setEnabled(true);
else
individualNamePreference.setEnabled(false);
// 设置包含onPreferenceChange事件方法的对象实例
individualNamePreference.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// 判断选中的是否为“是否保存个人信息”列表项的复选框
if ("yesno_save_individual_info".equals(preference.getKey())) {
// 设置“姓名”列表项为可选或不可选
findPreference("individual_name").setEnabled(
!findPreference("individual_name").isEnabled());
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// 设置“姓名”列表项中Summary的值
preference.setSummary(String.valueOf(newValue));
// 该方法必须返回true,否则无法保存设置的值
return true;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.confidant.projects"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.confidant.projects.PreferenceTestActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>