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>
在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", "")); } } }