Java Android-support.v7.PreferenceCategory占据了整个屏幕

Java Android-support.v7.PreferenceCategory占据了整个屏幕,java,android,android-support-library,Java,Android,Android Support Library,我正在使用支持首选项库,每个首选项类别都会在整个屏幕上填充空格,然后显示其中包含的首选项。我尝试将PreferenceCategorystyle属性-layout\u height更改为wrap\u内容,但没有成功 我的首选样式: <style name="PreferenceThemeOverlay"> <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item&

我正在使用支持首选项库,每个
首选项类别
都会在整个屏幕上填充空格,然后显示其中包含的首选项。我尝试将
PreferenceCategory
style属性-layout\u height更改为wrap\u内容,但没有成功

我的首选样式:

 <style name="PreferenceThemeOverlay">
    <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
    <item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
    <item name="preferenceCategoryStyle">@style/Preference.Category</item>
    <item name="preferenceStyle">@style/Preference</item>
    <item name="preferenceInformationStyle">@style/Preference.Information</item>
    <item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
    <item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
    <item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
    <item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
    <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
    <item name="android:subtitleTextStyle">@color/dark_gray</item>
</style>

@样式/首选项。首选项屏幕
@风格/偏好片段
@样式/首选项.Category
@风格/偏好
@样式/首选项信息
@style/Preference.CheckBoxPreference
@style/Preference.SwitchPreferenceCompat
@style/Preference.DialogPreference
@style/Preference.DialogPreference.EditTextPreference
@样式/首选项片段列表
@颜色/深灰色
我的首选xml:

<android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<android.support.v7.preference.PreferenceCategory
    android:key="pref_user_settings"
    android:title="@string/pref_group_user">
    <android.support.v7.preference.ListPreference
        android:defaultValue="Publisher"
        android:entries="@array/pref_user_types"
        android:entryValues="@array/pref_user_types"
        android:key="pref_user_type"
        android:title="@string/pref_title_user_type" />
</android.support.v7.preference.PreferenceCategory>


我解决这个问题的方法是自定义首选项类别文件

解决方案:

创建一个名为“自定义\首选项\类别”的新布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/gray"
    android:paddingTop="8dp"
    android:id="@android:id/title" />

然后将其添加到样式文件中:

<style name="Preference.Category">
    <item name="android:layout">@layout/custom_preference_category</item>
    <item name="android:shouldDisableView">false</item>
    <item name="android:selectable">false</item>
</style>

<style name="PreferenceThemeOverlay">
    <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
    <item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
    <item name="preferenceCategoryStyle">@style/Preference.Category</item>
    <item name="preferenceStyle">@style/Preference</item>
    <item name="preferenceInformationStyle">@style/Preference.Information</item>
    <item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
    <item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
    <item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
    <item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference
    </item>
    <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>

@布局/自定义\首选项\类别
假的
假的
@样式/首选项。首选项屏幕
@风格/偏好片段
@样式/首选项.Category
@风格/偏好
@样式/首选项信息
@style/Preference.CheckBoxPreference
@style/Preference.SwitchPreferenceCompat
@style/Preference.DialogPreference
@style/Preference.DialogPreference.EditTextPreference
@样式/首选项片段列表
然后在主应用程序主题中使用此样式:

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
@style/PreferenceThemeOverlay

我很久以前就这么做了,所以我不确定我是否已经做了这些,所以如果缺少什么,请给我反馈。

首选项需要在
/res/xml
中定义,而不是在
/res/layout
中定义,并在
首选项片段
首选项活动
中使用。有关示例,请参见。它们在
/res/xml
首选项片段中定义。我有完全相同的问题。“我试图解决它,但没有成功。@DannyHambourg您能解决这个问题吗?”?它让我头痛。“我花了几天的时间试图修复它,但没有得到它。”安德拉科斯塔我补充了一个答案。检查它是否适合你。