第一步:
定義Activity 繼承 PreferenceActivity
使用addPreferencesFromResource(R.xml.preferences); 顯示 xml
第二步:
編寫preferences xml文件保存再 res/xml目錄下
<?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>
第三步:
再code 中添加監聽和初始化
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);//==getSharedPreferences("packageName_preferences" ,MODE_PRIVATE); Resources resources = getResources(); CheckBoxPreference running_state = (CheckBoxPreference) findPreference("running_state");//保存再shared_prefs文件夾下的xml文件中,其中key為鍵,value為值保存再map節點下。 running_state.setChecked(FTPServerService.isRunning()); running_state.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if ((Boolean) newValue) { } return true; } }); EditTextPreference username_pref = (EditTextPreference) findPreference("username"); username_pref.setSummary(settings.getString("username", resources.getString(R.string.username_default))); username_pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String newUsername = (String) newValue; if (preference.getSummary().equals(newUsername)) return false; if (!newUsername.matches("[a-zA-Z0-9]+"))//采用正則表達式匹配用戶名 { Toast.makeText(ServerPreferenceActivity.this, R.string.username_validation_error, Toast.LENGTH_LONG).show(); return false; } preference.setSummary(newUsername); stopServer(); return true; } });
CheckBoxPreference acceptproxy_pref = (CheckBoxPreference) findPreference("allowNet"); acceptwifi_pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if ((Boolean) newValue == false) acceptproxy_pref.setChecked(true); stopServer(); return true; } });
help = findPreference("help"); help.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new AlertDialog.Builder(ServerPreferenceActivity.this).setTitle(R.string.help_dlg_title).setMessage(R.string.help_dlg_message) .setPositiveButton(getText(R.string.ok), null).show(); return true; } });