1

我正在使用以下内容settings.xml来膨胀我的SettingsFragment扩展android.support.v7.preference.PreferenceFragmentCompat

<android.support.v7.preference.PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.v7.preference.PreferenceCategory 
        android:title="@string/settings_category_title_general">

        <android.support.v7.preference.CheckBoxPreference
            android:defaultValue="@string/settings_default_value_lorem"
            android:key="@string/settings_key_lorem"
            android:summary="@string/settings_summary_lorem"
            android:title="@string/settings_title_lorem" />

    </android.support.v7.preference.PreferenceCategory>

</android.support.v7.preference.PreferenceScreen>

文本在以下定义的四行summary后被截断:com.android.support:preference-v7:24.2.1res/layout/preferences.xml

<TextView android:id="@android:id/summary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@android:id/title"
    android:layout_alignStart="@android:id/title"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="?android:attr/textColorSecondary"
    android:maxLines="4" />

布局检查器summary也显示 id:

偏好布局

为了覆盖设置,我定义了以下样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="preferenceTheme">@style/AppPreferenceTheme</item>
</style>

<style name="AppPreferenceTheme" parent="@style/PreferenceThemeOverlay">
    <item name="preferenceStyle">@style/AppPreference</item>
</style>

<style name="AppPreference" parent="@style/Preference">
    <item name="android:layout">@layout/settings_item</item>
</style>

preferences.xml并创建了一个名为settings_item.xmlwhich overwrites的原始布局文件的副本android:maxLines="4"

但是,该样式未应用。我background在视图中添加了一种颜色summary来检查这一点。


有关的

4

1 回答 1

1

构造函数的JavaDocPreference

从 XML 执行膨胀并应用特定于类的基本样式。Preference 的这个构造函数允许子类在膨胀时使用它们自己的基本样式。例如,CheckBoxPreference 构造函数调用此版本的超类构造函数并android.R.attr.checkBoxPreferenceStyle提供 defStyleAttr. 这允许主题的复选框首选项样式修改所有基本首选项属性以及 CheckBoxPreference类的属性。

因此,将您的样式更改为:

<style name="AppPreferenceTheme" parent="@style/PreferenceThemeOverlay">
    <item name="checkBoxPreferenceStyle">@style/AppPreference</item>
</style>

<style name="AppPreference" parent="@style/Preference.CheckBoxPreference">
    <item name="layout">@layout/settings_item</item>
</style>
于 2018-05-15T14:00:55.793 回答