我已经迁移到androidx。*库,其中一个是新的首选项库:
androidx.preference:preference:1.1.0-alpha01
-它的最新版本。
如release notes 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>
屏幕截图
手动设置app:iconSpaceReserved=false
时(如在PreferenceCategory 2和Preference 4上看到的),它可以正常工作,但否则保留图标空间。
另外,docs表示默认情况下为false
:
默认情况下,没有提供图标时,首选项图标视图的可见性将设置为“消失”,因此此属性的默认值为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
。