gpt4 book ai didi

android - 如何在 ActionBar 标题中设置自定义字体?

转载 作者:IT老高 更新时间:2023-10-28 12:51:13 28 4
gpt4 key购买 nike

如何(如果可能)在我的 Assets 文件夹中使用字体在 ActionBar 标题文本(仅 - 不是选项卡文本)中设置自定义字体?我不想使用 android:logo 选项。

最佳答案

您可以使用自定义 TypefaceSpan 类来做到这一点。它优于上面指出的 customView 方法,因为它在使用其他操作栏元素(如扩展操作 View )时不会中断。

这样一个类的使用看起来像这样:

SpannableString s = new SpannableString("My Title");
s.setSpan(new TypefaceSpan(this, "MyTypeface.otf"), 0, s.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

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

自定义 TypefaceSpan 类被传递给您的 Activity 上下文和 assets/fonts 目录中的字体名称。它加载文件并在内存中缓存一个新的 Typeface 实例。 TypefaceSpan 的完整实现非常简单:

/**
* 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("fonts/%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);
}
}

只需将上面的类复制到您的项目中,并在您的 Activity 的 onCreate 方法中实现它,如上所示。

关于android - 如何在 ActionBar 标题中设置自定义字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com