Вложенные предпочтения.xml - PullRequest
32 голосов
/ 15 марта 2011

Возможно ли как-то включить один preferences.xml в другой, как это можно сделать для макетов с тегом <include />?

Допустим,

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceScreen 
        android:title="@string/pref_group_title_visual">
        <include 
            preferences_filename="xml/pref_visual"/>
    </PreferenceScreen>
...

Ответы [ 4 ]

25 голосов
/ 02 декабря 2011

Решение здесь заключается в том, чтобы раздуть оба файла настроек из PreferencesActivity.Например:

    addPreferencesFromResource(R.xml.options);
    addPreferencesFromResource(R.xml.additional_options);
14 голосов
/ 08 мая 2012

Решение душа показывает работы. Его можно развернуть, чтобы показывать настройки, только если вы разработчик, использующий неподписанную версию приложения;)

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

Я создал сообщение в блоге об этой проблеме, и у меня есть полный рабочий пример кода, доступный для загрузки. http://androidfu.blogspot.com/2012/05/developer-debug-with-nested-preferences.html

3 голосов
/ 27 декабря 2013

Чтобы по-настоящему достичь эффекта вложения, вы можете использовать эту технику для перемещения загруженных предпочтений в уже загруженную группу.

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

Где расширенный addPreferencesFromResource определяется как:

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);
    }
}

Это работает для любой PreferenceGroup, такой как PreferenceScreen и PreferenceCategory.

2 голосов
/ 03 апреля 2011

Нет, кажется невозможным.Но есть простой обходной путь.Вы можете сделать еще один PreferenceActivity, который загружает вложенный PreferenceScreen.А в основном файле preference.xml необходимо создать объект Preference и установить для него объект Intent в коде (используя метод setIntent()).Это Intent необходимо использовать для создания второго PreferenceActivity.

...