我已经迁移到androidx。*库,其中一个是新的偏好设置库:androidx.preference:preference:1.1.0-alpha01-最新版本。

release notes中所述,iconSpaceReserved属性无法与PreferenceCategories一起正确修复。

但是看起来默认情况下它设置为 true

我已经建立了演示项目来对其进行测试。

首选项 fragment

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>

截屏

android - PreferenceFragmentCompat默认情况下具有iconSpaceReserved为true-LMLPHP

手动设置app:iconSpaceReserved=false时(如在PreferenceCategory 2和Preference 4上可以看到的),它可以正常工作,但否则保留图标空间。
另外docs表示默认情况下为false:



如果未设置该图标,是在该库中是一个新的bug还是一项新功能?还是我做错了什么?

我知道解决方法:
  • PreferenceFragmentCompat has padding on PreferenceCategory that I can't get rid of
  • How to get remove margin/padding in Preference Screen


  • 编辑:

    浏览了源代码之后,我发现了下一个问题。
    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

    最佳答案

    posted this on the Issue Tracker并得到以下答案:

    关于android - PreferenceFragmentCompat默认情况下具有iconSpaceReserved为true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53443354/

    10-11 14:23