【起航计划 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定义一一对应。

 

你可能感兴趣的:(preferences)