Nested preferences.xml

后端 未结 4 1454
小蘑菇
小蘑菇 2020-12-24 06:03

Is it somehow possible to include one preferences.xml into another, like it can be done for layouts with the tag?

Let\'s

相关标签:
4条回答
  • 2020-12-24 06:22

    To truly achieve the nesting effect you can use this technique to relocate the loaded preferences to a group already loaded.

    PreferenceCategory notifications = (PreferenceCategory) getPreferenceScreen ().findPreference (PreferenceKey.pref_notifications.name ());
    addPreferencesFromResource (R.xml.pref_notifications, notifications);
    

    Where the enhanced addPreferencesFromResource is defined as:

    private void addPreferencesFromResource (int id, PreferenceGroup newParent) {
        PreferenceScreen screen = getPreferenceScreen ();
        int last = screen.getPreferenceCount ();
        addPreferencesFromResource (id);
        while (screen.getPreferenceCount () > last) {
            Preference p = screen.getPreference (last);
            screen.removePreference (p); // decreases the preference count
            newParent.addPreference (p);
        }
    }
    

    It works for any PreferenceGroup such as PreferenceScreen and PreferenceCategory.

    0 讨论(0)
  • 2020-12-24 06:28

    The solution soul shows works. It can be expanded to only show preferences if you're the developer using an unsigned version of the app ;)

    addPreferencesFromResource(R.xml.options);
    addPreferencesFromResource(R.xml.additional_options);
    if (BuildConfig.DEBUG) {
        addPreferencesFromResource(R.xml.developer_options);
    }
    

    I created a blog post regarding this issue and have a complete working code example available for download. http://androidfu.blogspot.com/2012/05/developer-debug-with-nested-preferences.html

    0 讨论(0)
  • 2020-12-24 06:39

    No, it seems to be impossible. But there's a simple workaround. You can make another PreferenceActivity that loads nested PreferenceScreen. And in the main preference.xml file you need to create a Preference object and set an Intent object for it in code (using setIntent() method). This Intent must be used to create the second PreferenceActivity.

    0 讨论(0)
  • 2020-12-24 06:46

    Solution here it is to inflate both preference files from PreferencesActivity. For example:

        addPreferencesFromResource(R.xml.options);
        addPreferencesFromResource(R.xml.additional_options);
    
    0 讨论(0)
提交回复
热议问题