我知道如何在操作栏上设置自定义字体。我只需要扩展SherlockFragmentActivity并像这样覆盖setTitle:

@Override
public void setTitle(CharSequence title) {
    String str = String.valueOf(title);
    str = str.toUpperCase(Locale.getDefault());
    SpannableString s = new SpannableString(str);
    MetricAffectingSpan span = new MetricAffectingSpan() {
        @Override
        public void updateMeasureState(TextPaint p) {
            p.setTypeface(FontManager.INSTANCE.getAppFont());
        }

        @Override
        public void updateDrawState(TextPaint tp) {
            tp.setTypeface(FontManager.INSTANCE.getAppFont());
        }
    };

    s.setSpan(span, 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    getSupportActionBar().setTitle(s);
}

但是,上下文操作栏使事情变得复杂。该库使用工厂来返回上下文操作栏,如下所示:
ActionMode mode = getSherlockActivity().startActionMode(mActionModeCallback);
mode.setTitle("whatever");

我可以重写ActionMode,但是lib不会返回它。

有任何想法吗?

最佳答案

我看有点复杂...

您将需要创建一个View,将TextView放置为标题,设置该TextView所需的字体,并使用setCustomView将 View 与新字体一起放置。

希望对您有帮助。

更新

您是否尝试过创建自己的方法,如下所示:

public void setActionModeTitle(CharSequence title) {
    String str = String.valueOf(title);
    str = str.toUpperCase(Locale.getDefault());
    SpannableString s = new SpannableString(str);
    MetricAffectingSpan span = new MetricAffectingSpan() {
        @Override
        public void updateMeasureState(TextPaint p) {
            p.setTypeface(FontManager.INSTANCE.getAppFont());
        }

        @Override
        public void updateDrawState(TextPaint tp) {
            tp.setTypeface(FontManager.INSTANCE.getAppFont());
        }
    };

    s.setSpan(span, 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    actionMode.setTitle(s);
}

10-01 06:42
查看更多