gpt4 book ai didi

java - Android 应用程序和 ActionBar 中的自定义字体

转载 作者:搜寻专家 更新时间:2023-11-01 08:50:00 24 4
gpt4 key购买 nike

我整个下午都在为在我的 Android 应用程序中实现自定义字体而绞尽脑汁。首先,我在使用抽屉导航中的自定义字体时遇到了麻烦。这似乎行不通。所以我决定尝试 Actionbar 标题,但我遇到了同样的问题。

我找到了这个网站 http://www.tristanwaddington.com/2013/03/styling-the-android-action-bar-with-a-custom-font/并决定尝试一下。

我使用以下代码创建了一个自定义 java 文件:

package vimen.vimenlogin;

import android.content.Context;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
import android.util.LruCache;

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}.
*/
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);
}
}

之后,我将该方法放入我的 main.java 文件中:

public void restoreActionBar()
{
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);

SpannableString s = new SpannableString("testing");
s.setSpan(new TypefaceSpan(this, "fonts/Raleway-Bold.ttf"), 0, s.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

// Update the action bar title with the TypefaceSpan instance
actionBar.setTitle(s);
//actionBar.setTitle(mTitle);
}

但是,我收到此错误 Caused by: java.lang.RuntimeException: native typeface cannot be made 加上应用程序崩溃。

最佳答案

TypefaceSpan 不采用字体路径。它仅适用于内置字体系列。从代码 fragment 中无法判断您使用的是 TypefaceSpan 还是内置的 TypefaceSpan

(专业提示:使用与 TypefaceSpan 不同的类名)

错误消息通常意味着 Android 无法找到字体文件或由于某种原因无法解释它。根据您的代码,您的字体文件需要是:

assets/fonts/fonts/Raleway-Bold.ttf

在您的项目中,因为您在TypefaceSpan 和您对该TypefaceSpan 的使用中都有fonts/。如果字体文件不存在,请移动它或修复您的代码以引用其实际位置。

关于java - Android 应用程序和 ActionBar 中的自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467904/

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