Как настроить макет (maxLines) CheckBoxPreference? - PullRequest
0 голосов
/ 15 мая 2018

Я использую следующие 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.1 в res/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:

Preference layout

Чтобы перезаписать настройку, я определил следующие стили:

<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.xml, который перезаписывает android:maxLines="4".

Однако стиль не применяется . Я добавил background цвет в summary, чтобы проверить это.


Относящиеся

1 Ответ

0 голосов
/ 15 мая 2018

Из JavaDoc конструктора Preference :

Выполнение инфляции из 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>
...