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

  • 相关阅读:
    二十二、Linux 进程与信号---进程创建
    二十一、Linux 进程与信号---进程查看和进程状态、进程调度和进程状态变化、进程标识
    二十一、Linux 进程与信号---进程资源限制
    二十、Linux 进程与信号---非局部跳转
    AOSP android 源码下载
    十九、Linux 进程与信号---环境表
    十八、Linux 进程与信号---进程介绍
    09 scroll系列_简单的封装动画函数(变速(缓动)的动画函数_getComputedStyle函数_复杂的动画函数封装_颜色相关_案例_client系列
    A 第二课 栈_队列_堆
    pycharm 的快捷键
  • 原文地址:https://www.cnblogs.com/dongdong230/p/4323054.html
Copyright © 2020-2023  润新知