PreferenceActivity一般用来实现app的设置页
如图:
PreferenceActivity就是用SharedPreference的形式存储用户的偏好设置。
PreferenceActivity通过读取xml的方式来显示页面,控件都是封装好的,实用起来特别方便。
1.先在res下新建一个xml文件 preference.xml
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >//根节点
<PreferenceCategory android:title="FirstCategory" >//分割线隔开的一个一个分类
<ListPreference
android:defaultValue="list key default values"
android:dialogTitle="list_dialog_title"
android:entries="@array/list_array"
android:entryValues="@array/list_array" //单选的list
android:key="list_key"
android:summary="list summary"
android:title="list title" >
</ListPreference>
</PreferenceCategory>
<PreferenceCategory android:title="Second Category" >
<EditTextPreference
android:defaultValue="edit default value"
android:key="edit_text_key" //编辑框样式
android:summary="edit summary"
android:title="edit_title" >
</EditTextPreference>
<CheckBoxPreference
android:defaultValue="checkbox default value"
android:key="checkbox_key"
android:summary="checkbox_summary" //复选框样式
android:title="checkbox_title" />
<EditTextPreference
android:defaultValue="0"
android:key="num_key"
android:numeric="integer"
android:summary="edit summary"
android:title="input number" />
<PreferenceScreen
android:summary="more..."
android:title="more" >
<PreferenceCategory android:title="more_title" > //嵌套一个根节点,实际点击的时候跳转新的一个屏幕
<CheckBoxPreference
android:defaultValue="abcd"
android:key="more_key"
android:summary="more_key"
android:title="MORE" />
</PreferenceCategory>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
2.新建MyPreferenceActivity 继承 PreferenceActivity
在onCreatefang方法中addPreferencFromResource(int id)加载xml
实例化,实现OnSharedPreferenceChangeListener当值发生变化是可改变控件的值,
在onResum中初始化控件的值
public class MyPreferenceActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
private ListPreference mListPreference;
private EditTextPreference mEditTextPreference, mNumPreference;
private CheckBoxPreference mBoxPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
initPreference();
}
private void initPreference() {
mListPreference = (ListPreference) findPreference("list_key");
mEditTextPreference = (EditTextPreference) findPreference("edit_text_key");
mNumPreference = (EditTextPreference) findPreference("num_key");
mBoxPreference = (CheckBoxPreference) findPreference("checkbox_key");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
SharedPreferences mSharedPreferences = getPreferenceScreen()
.getSharedPreferences();
mListPreference
.setSummary(mSharedPreferences.getString("list_key", ""));
mEditTextPreference.setSummary(mSharedPreferences.getString(
"edit_text_key", ""));
// mNumPreference.setSummary(mSharedPreferences.getInt("num_key", 0));
// mBoxPreference.setSummary(mSharedPreferences.getString("checkbox_key",
// ""));
mSharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
if (arg1.equals("edit_text_key")) {
mEditTextPreference.setSummary(arg0
.getString("edit_text_key", "20"));
} else if (arg1.equals("list_key")) {
mListPreference.setSummary(arg0.getString("list_key", ""));
}
}
}