PreferenceActivity 系统本身的设置页
PreferenceActivity extends ListView
分组:PreferenceCategory
开关:CheckBoxference
ListPreference
EditTextPreference
每一次设置,都会被Preference,这就是setting的数据持久化。
//数组定义
<!--?xml version="1.0" encoding="utf-8"?-->
<resources>
<string-array name="list_preference">
<item>Red</item>
<item>Blue</item>
<item>Green</item>
</string-array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:defaultValue="false"
android:key="running_state" android:summary="@string/running_summary_stopped" //摘要
android:title="@string/running_label" /> //标题
<PreferenceCategory //分类、种类
android:key="settings"
android:title="@string/settings_label" >
<EditTextPreference
android:defaultValue="@string/username_default"
android:key="username"
android:title="@string/username_label" />
<PreferenceScreen //点击启动一个新的Preference 界面,如果配置intent节点,甚至可以启动浏览器打开web
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/advancedsettings_label" >
<EditTextPreference
android:defaultValue="@string/portnumber_default"
android:key="portNum"
android:title="@string/portnumber_label" />
<CheckBoxPreference
android:defaultValue="@string/wakelock_default"
android:key="stayAwake"
android:title="@string/wakelock_label" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory
android:key="extra_category"
android:title="@string/extra_label" >
<Preference
android:key="help"
android:title="@string/help_label" />
</PreferenceCategory>
</PreferenceScreen>
//Setting中是加入这些UI信息
public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener{
private EditTextPreference mEtPreference;
private ListPreference mListPreference;
private CheckBoxPreference mCheckPreference;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//显示xml
addPreferencesFromResource(R.xml.preferences);
initPreferences();
}
private void initPreferences(){
mEtPreference =(EditTextPreference)findPreference(Consts.EDIT_KEY);
mListPreference = (ListPreference)findPreference(Consts.LIST_KEY);
mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY);
}
}
//获取自己设置好的偏好
//我们需要注册一个Preference变化的Listener来监听这些事件。当我们做好设置后,Preference已经替我们做好了数据持久化了。
protected void onResume(){
super.onResume();
//SetUp the inital values
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
/*
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);//==getSharedPreferences("packageName_preferences" ,MODE_PRIVATE);
*/
mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY, ""));
mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY, "linc"));
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
protected void onPause(){
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key){
if(key.equals(Consts.EDIT_KEY)){
mEtPreference.setSummary(sharedPreferences.getString(key,"20"));
}else if(key.equals(Consts.LIST_KEY)){
mListPreference.setSummary(sharedPreferences.getString(key,""));
}
}
//在其他Activity中获得设置的值
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY,false)+"");