【问题标题】:How to change the font of toolbar title in CollapsingToolbarLayout?如何更改 CollapsingToolbarLayout 中工具栏标题的字体?
【发布时间】:2016-07-29 01:22:04
【问题描述】:

我在更改其样式方面尝试了无数次尝试和错误,但我仍然无法更改工具栏标题的字体(我也在使用 Calligraphy 库)并且不确定工具栏标题的属性是在工具栏上还是在折叠工具栏布局。 任何帮助将不胜感激,谢谢!

【问题讨论】:

标签: android fonts toolbar android-collapsingtoolbarlayout


【解决方案1】:

您可以使用自定义 TypefaceSpan 类并在您的 Activity 中像这样应用它,在这种情况下我想使用 Arial:

SpannableString s = new SpannableString("CANTEEN");
s.setSpan(new TypefaceSpan(this, "Arial.otf"), 0, s.length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

// Update the action bar title with the TypefaceSpan instance
ActionBar actionBar = getActionBar();
actionBar.setTitle(s);

你需要复制这个类并将其保存在你的应用程序中,并将字体文件放在 assets/fonts 目录中。 (如本教程中:http://www.viralandroid.com/2016/01/how-to-use-custom-fonts-in-android-application.html) 它会将文件加载到内存中并在具有该字体类型的实例中使用它。

/**
 * Style a {@link Spannable} with a custom {@link Typeface}.
 * 
 * @author Tristan Waddington
 */
public class TypefaceSpan extends MetricAffectingSpan {
      /** An <code>LruCache</code> for previously loaded typefaces. */
    private static LruCache<String, Typeface> sTypefaceCache =
            new LruCache<String, Typeface>(12);

    private Typeface mTypeface;

    /**
     * Load the {@link Typeface} and apply to a {@link Spannable}.
     */
    public TypefaceSpan(Context context, String typefaceName) {
        mTypeface = sTypefaceCache.get(typefaceName);

        if (mTypeface == null) {
            mTypeface = Typeface.createFromAsset(context.getApplicationContext()
                    .getAssets(), String.format("/%s", typefaceName));

            // Cache the loaded Typeface
            sTypefaceCache.put(typefaceName, mTypeface);
        }
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}

如果你想使用android的默认字体之一,你只有三种: 1个普通(Droid Sans), 2 衬线(Droid Serif), 3 个等宽(Droid Sans Mono)。

希望对你有帮助!

【讨论】:

  • 但是,(this, "FuturaPTCondMedium.otf") from s.setSpan(new TypefaceSpan(this, "FuturaPTCondMedium.otf"), 0, s.length(), 说它不能解析 TypefaceSpan 的构造函数
  • 你复制了我发布的类 public class TypefaceSpan extends MetricAffectingSpan { 吗?
  • 是的,我创建了一个类。
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多