我已经迁移到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>
截屏
手动设置
app:iconSpaceReserved=false
时(如在PreferenceCategory 2和Preference 4上可以看到的),它可以正常工作,但否则保留图标空间。另外docs表示默认情况下为
false
:如果未设置该图标,是在该库中是一个新的bug还是一项新功能?还是我做错了什么?
我知道解决方法:
编辑:
浏览了源代码之后,我发现了下一个问题。
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/