默认情况下,PreferenceFragmentCompat 的 iconSpaceReserved 为 true
PreferenceFragmentCompat has iconSpaceReserved true by default
我已经迁移到 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 中所见),它工作正常,但除此之外,图标的 space 被保留。
另外 docs 表示它默认为 false
:
By default, preference icon view visibility will be set to GONE when there is no icon provided, so the default value of this attribute is false.
如果没有设置图标就留下space是这个库的新bug还是新特性?还是我做错了什么?
我知道解决方法:
- PreferenceFragmentCompat 在 PreferenceCategory 上有填充,我无法摆脱
- 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 得到了以下答案:
This is intended and part of the Material spec for Settings. See
Material Design guide under 'Alignment'.
我已经迁移到 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 中所见),它工作正常,但除此之外,图标的 space 被保留。
另外 docs 表示它默认为 false
:
By default, preference icon view visibility will be set to GONE when there is no icon provided, so the default value of this attribute is false.
如果没有设置图标就留下space是这个库的新bug还是新特性?还是我做错了什么?
我知道解决方法:
- PreferenceFragmentCompat 在 PreferenceCategory 上有填充,我无法摆脱
- 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 得到了以下答案:
This is intended and part of the Material spec for Settings. See Material Design guide under 'Alignment'.