zoukankan      html  css  js  c++  java
  • 【起航计划 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定义一一对应。

  • 相关阅读:
    链接唤醒IOSApp
    C#抽象属性
    c#结构体与类的区别
    广告学入门
    个性化推荐十大挑战[
    MapReduce 读取和操作HBase中的数据
    mysql sql命令大全
    从B 树、B+ 树、B* 树谈到R 树
    MapReduce操作HBase
    Meanshift,聚类算法
  • 原文地址:https://www.cnblogs.com/dongdong230/p/4323054.html
Copyright © 2011-2022 走看看