PreferenceFragmentCompat имеет iconSpaceReserved true по умолчанию - PullRequest
0 голосов
/ 23 ноября 2018

Я перешел на библиотеки androidx. *, И одна из них - новая библиотека настроек: androidx.preference:preference:1.1.0-alpha01 - последняя версия.

Как сказано в заметках о выпуске iconSpaceReserved атрибут, некорректно работающий с PreferenceCategories, исправлен.

Но похоже, что он установлен на true по умолчанию.

Я построил демопроект для его проверки.

PreferencesFragment

import androidx.preference.PreferenceFragmentCompat;

public class SetttingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        addPreferencesFromResource(R.xml.preferences);
    }
}

preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <PreferenceCategory android:title="Category 1">
        <Preference
            android:key="pref1"
            android:title="Preference 1" />
        <Preference
            android:key="pref2"
            android:title="Preference 2" />
    </PreferenceCategory>
    <PreferenceCategory
        android:title="Category 2"
        app:iconSpaceReserved="false">
        <Preference
            android:key="pref3"
            android:title="Preference 3" />
        <Preference
            android:key="pref4"
            android:title="Preference 4"
            app:iconSpaceReserved="false" />
    </PreferenceCategory>
    ...
</PreferenceScreen>

Тема настроек установлена ​​какнеобходимо.

styles.xml

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>

Снимок экрана

PreferencesFragment

Когда app:iconSpaceReserved=false установлен вручную (как вы можете видеть в PreferenceCategory 2 и Preference 4), он работает нормально, но в противном случае место для значка зарезервировано.Кроме того, docs говорит, что по умолчанию это false:

По умолчанию видимость значка настроек предпочтения будет установлена ​​на GONE, если значок отсутствует, поэтому значение по умолчаниюэтот атрибут имеет значение false.

Это новая ошибка в этой библиотеке или новая возможность оставлять место для значка, если он не установлен?Или я что-то не так делаю?

Я знаю об обходных путях:


Редактировать:

После просмотра источников я нашел следующую вещь.

PreferenceThemeOverlay -> anyPreferenceStyle установил атрибут

<item name="iconSpaceReserved">@bool/config_materialPreferenceIconSpaceReserved</item>

, который относится к

values/values.xml
    <bool name="config_materialPreferenceIconSpaceReserved">false</bool>

и

values-sw360dp-v13/values-sw360dp-v13.xml
    <bool name="config_materialPreferenceIconSpaceReserved">true</bool>

По некоторым причинам он установлен на true здесь.

1 Ответ

0 голосов
/ 23 ноября 2018

Я разместил это в системе отслеживания проблем и получил следующий ответ:

Это предназначено и является частью спецификации материала для настроек.См. Руководство по проектированию материалов в разделе «Выравнивание».

...