Android 更改“ListPreference”摘要的字体`

Android 更改“ListPreference”摘要的字体`,android,listpreference,Android,Listpreference,我尝试更改首选项屏幕的所有首选项的字体。 除了列表首选项的摘要之外,它在任何地方都发生了更改。 有人知道如何在列表首选项的摘要上应用自定义字体吗 更新 我想将我的自定义字体应用于“资产”文件夹,而不是内置文件夹。另外android:textAppearanceListItemSecondary需要API 21,我的应用程序至少支持API 15 试试这个 <!-- Base application theme. --> <style name="AppTheme" pa

我尝试更改
首选项屏幕
的所有首选项的字体。 除了
列表首选项的摘要
之外,它在任何地方都发生了更改。 有人知道如何在
列表首选项的摘要上应用自定义字体吗

更新

我想将我的自定义字体应用于“资产”文件夹,而不是内置文件夹。另外
android:textAppearanceListItemSecondary
需要API 21,我的应用程序至少支持API 15

试试这个

 <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="android:textAppearanceListItemSecondary">@style/textAppearanceListItemSecondaryCustom</item>
    </style>


    <style name="textAppearanceListItemSecondaryCustom">
        <item name="android:textSize">14sp</item>
        <item name="android:typeface">monospace</item>
    </style>

@样式/文本外观ListItemSecondary自定义
14便士
单空间

最后是更改
列表首选项摘要字体的方法

覆盖
ListPreference
onBindViewHolder
方法来设置自定义字体。检查下面的自定义类

public class CustomListPreference extends ListPreference {
private String typefaceTitle, typefaceSummary;

public CustomListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    init(context, attrs);
}

public CustomListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs);
}

public CustomListPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs);
}

public CustomListPreference(Context context) {
    super(context);
}

@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
    super.onBindViewHolder(holder);
    if(!TextUtils.isEmpty(typefaceTitle)) {
        TextView titleView = (TextView) holder.findViewById(android.R.id.title);
        titleView.setTypeface(FontManager.getInstance().getFont(typefaceTitle));
    }
    if(!TextUtils.isEmpty(typefaceSummary)){
        final TextView summaryView = (TextView) holder.findViewById(
                android.R.id.summary);
        summaryView.setTypeface(FontManager.getInstance().getFont(typefaceSummary));
    }
}

private void init(Context context, AttributeSet attrs){
    TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.Preference);

    typefaceTitle = a.getString(R.styleable.Preference_typefaceTitle);
    typefaceSummary = a.getString(R.styleable.Preference_typefaceSummary);

    a.recycle();
}}
attrs.xml


首选项屏幕中的用法

<YOUR_CustomListPreference_PACKAGE_NAME.CustomListPreference
        android:defaultValue="X"
        android:dialogTitle="Dialog Title"
        android:entries="@array/list_item_title"
        android:entryValues="@array/list_item_value"
        android:key="pref_list"
        android:summary="%s"
        android:title="@string/Preference Title"
        app:typefaceTitle="YOUR FONT NAME"
        app:typefaceSummary="YOUR FONT NAME"/>

希望这对其他人有帮助

<YOUR_CustomListPreference_PACKAGE_NAME.CustomListPreference
        android:defaultValue="X"
        android:dialogTitle="Dialog Title"
        android:entries="@array/list_item_title"
        android:entryValues="@array/list_item_value"
        android:key="pref_list"
        android:summary="%s"
        android:title="@string/Preference Title"
        app:typefaceTitle="YOUR FONT NAME"
        app:typefaceSummary="YOUR FONT NAME"/>