更改`ListPreference`摘要的字体字体

时间:2017-02-06 05:06:37

标签: android listpreference

我尝试使用THIS LINK更改PreferenceScreen所有首选项的字体。 除ListPreference的摘要外,它在任何地方都被更改了。 任何人都可以知道如何在ListPreference的摘要中应用自定义字体?

更新

我想将自定义字体应用于assets文件夹,而不是in-build。另外android:textAppearanceListItemSecondary需要API 21,我的应用支持最低API 15。

2 个答案:

答案 0 :(得分:0)

试试这个

 <!-- 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>

答案 1 :(得分:0)

最后改变ListPreference摘要字体的方法。

覆盖onBindViewHolder的{​​{1}}方法以设置自定义字体。检查下面的自定义类。

ListPreference

attrs.xml

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();
}}

在首选项屏幕中使用。

<declare-styleable name="Preference">
    <attr name="typefaceTitle" format="string"></attr>
    <attr name="typefaceSummary" format="string"></attr>
</declare-styleable>

希望对其他人有所帮助。