【起航计划 030】2015 起航计划 Android APIDemo的魔鬼步伐 29 App->Preferences->Preferences from code
这里我们使用类比的方法,将 PreferenceActivity 与一般的Activity 作个类比,可以更好的理解Android.Preference中的各个类。
PreferenceActivity | Activity |
Preference | View |
PreferenceGroup | ViewGroup |
PreferenceScreen | LinearLayout |
CheckBoxPreference | CheckBox |
EditTextPreference | EditText |
ListPreference | List |
PreferenceCategory | ViewGroup |
… | .. |
PreferenceActivity 的UI是通过Preference等来定义,和Activity的ContentView一样,PreferenceActivity 的UI可以通过XML定义,也可以使用代码来定义,本例就是使用代码来定义PreferenceActivity 的UI。部分代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); setPreferenceScreen(root); populatePreferenceHierarchy(root); } private void populatePreferenceHierarchy(PreferenceScreen root) { // Inline preferences PreferenceCategory inlinePrefCat = new PreferenceCategory(this); inlinePrefCat.setTitle(R.string.inline_preferences); root.addPreference(inlinePrefCat); // Checkbox preference CheckBoxPreference checkboxPref = new CheckBoxPreference(this); checkboxPref.setKey("checkbox_preference"); checkboxPref.setTitle(R.string.title_checkbox_preference); checkboxPref.setSummary(R.string.summary_checkbox_preference); inlinePrefCat.addPreference(checkboxPref); // Switch preference SwitchPreference switchPref = new SwitchPreference(this); switchPref.setKey("switch_preference"); switchPref.setTitle(R.string.title_switch_preference); switchPref.setSummary(R.string.summary_switch_preference); inlinePrefCat.addPreference(switchPref); // Dialog based preferences PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this); dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences); root.addPreference(dialogBasedPrefCat); // Edit text preference EditTextPreference editTextPref = new EditTextPreference(this); editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference); editTextPref.setKey("edittext_preference"); editTextPref.setTitle(R.string.title_edittext_preference); editTextPref.setSummary(R.string.summary_edittext_preference); dialogBasedPrefCat.addPreference(editTextPref); // List preference ListPreference listPref = new ListPreference(this); listPref.setEntries(R.array.entries_list_preference); listPref.setEntryValues(R.array.entryvalues_list_preference); listPref.setDialogTitle(R.string.dialog_title_list_preference); listPref.setKey("list_preference"); listPref.setTitle(R.string.title_list_preference); listPref.setSummary(R.string.summary_list_preference); dialogBasedPrefCat.addPreference(listPref); // Launch preferences PreferenceCategory launchPrefCat = new PreferenceCategory(this); launchPrefCat.setTitle(R.string.launch_preferences); root.addPreference(launchPrefCat); /* * The Preferences screenPref serves as a screen break (similar to page * break in word processing). Like for other preference types, we assign * a key here so that it is able to save and restore its instance state. */ // Screen preference PreferenceScreen screenPref = getPreferenceManager().createPreferenceScreen(this); screenPref.setKey("screen_preference"); screenPref.setTitle(R.string.title_screen_preference); screenPref.setSummary(R.string.summary_screen_preference); launchPrefCat.addPreference(screenPref); /* * You can add more preferences to screenPref that will be shown on the * next screen.childCheckBoxPref.setDependency(PARENT_CHECKBOX_PREFERENCE); */ // Example of next screen toggle preference CheckBoxPreference nextScreenCheckBoxPref = new CheckBoxPreference(this); nextScreenCheckBoxPref.setKey("next_screen_toggle_preference"); nextScreenCheckBoxPref.setTitle(R.string.title_next_screen_toggle_preference); nextScreenCheckBoxPref.setSummary(R.string.summary_next_screen_toggle_preference); screenPref.addPreference(nextScreenCheckBoxPref); // Intent preference PreferenceScreen intentPref = getPreferenceManager().createPreferenceScreen(this); intentPref.setIntent(new Intent().setAction(Intent.ACTION_VIEW) .setData(Uri.parse("http://www.android.com"))); intentPref.setTitle(R.string.title_intent_preference); intentPref.setSummary(R.string.summary_intent_preference); launchPrefCat.addPreference(intentPref); // Preference attributes PreferenceCategory prefAttrsCat = new PreferenceCategory(this); prefAttrsCat.setTitle(R.string.preference_attributes); root.addPreference(prefAttrsCat); // Visual parent toggle preference CheckBoxPreference parentCheckBoxPref = new CheckBoxPreference(this); parentCheckBoxPref.setTitle(R.string.title_parent_preference); parentCheckBoxPref.setSummary(R.string.summary_parent_preference); prefAttrsCat.addPreference(parentCheckBoxPref); parentCheckBoxPref.setKey(PARENT_CHECKBOX_PREFERENCE); // Visual child toggle preference // See res/values/attrs.xml for the <declare-styleable> that defines // TogglePrefAttrs. TypedArray a = obtainStyledAttributes(R.styleable.TogglePrefAttrs); CheckBoxPreference childCheckBoxPref = new CheckBoxPreference(this); childCheckBoxPref.setTitle(R.string.title_child_preference); childCheckBoxPref.setSummary(R.string.summary_child_preference); childCheckBoxPref.setLayoutResource( a.getResourceId(R.styleable.TogglePrefAttrs_android_preferenceLayoutChild, 0)); prefAttrsCat.addPreference(childCheckBoxPref); childCheckBoxPref.setDependency(PARENT_CHECKBOX_PREFERENCE); a.recycle(); }
基本上和使用XML定义一一对应。
Le王冬冬 博客分享地址:
http://www.cnblogs.com/dongdong230/
每个人都应做一天攻城狮