PreferenceFragmentCompat 的 iconSpaceReserved 默认为 true

Sab*_*bre 5 android android-preferences preferencefragment androidx

我已经迁移到 androidx.* 库,其中之一是新的首选项库: androidx.preference:preference:1.1.0-alpha01- 它的最新版本。

发行说明中 所述,iconSpaceReserved属性与 PreferenceCategories 无法正常工作已修复。

但看起来它默认设置为true

我已经构建了演示项目来测试它。

首选项片段

import androidx.preference.PreferenceFragmentCompat;

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

首选项.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>
Run Code Online (Sandbox Code Playgroud)

首选项主题根据需要设置。

样式文件

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
Run Code Online (Sandbox Code Playgroud)

截屏

首选项片段

app:iconSpaceReserved=false手动设置时(如您在 PreferenceCategory 2 和 Preference 4 上看到的),它工作正常,但否则会保留图标空间。此外文档说,这是false在默认情况下:

默认情况下,当没有提供图标时,首选项图标视图可见性将设置为 GONE,因此该属性的默认值为 false。

如果未设置图标,它是该库中的新错误还是为图标留出空间的新功能?还是我做错了什么?

我知道解决方法:


编辑:

在查看了来源之后,我发现了下一件事。

PreferenceThemeOverlay -> anyPreferenceStyle 已设置属性

<item name="iconSpaceReserved">@bool/config_materialPreferenceIconSpaceReserved</item>
Run Code Online (Sandbox Code Playgroud)

指的是

values/values.xml
    <bool name="config_materialPreferenceIconSpaceReserved">false</bool>
Run Code Online (Sandbox Code Playgroud)

values-sw360dp-v13/values-sw360dp-v13.xml
    <bool name="config_materialPreferenceIconSpaceReserved">true</bool>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它被设置在true这里。

Sab*_*bre 5

我已经在问题跟踪器上发布了这个并得到了以下答案:

这是用于设置的材料规范的一部分。请参阅 “对齐”下的材料设计指南