Java Android应用程序和ActionBar中的自定义字体
我整个下午都在绞尽脑汁在Android应用程序中实现自定义字体。首先,我在导航抽屉中的自定义字体有问题。这似乎不起作用。所以我决定试试Actionbar的标题,但我也有同样的问题 我找到了这个网站,决定试试看 我创建了一个自定义java文件,代码如下:Java Android应用程序和ActionBar中的自定义字体,java,android,fonts,Java,Android,Fonts,我整个下午都在绞尽脑汁在Android应用程序中实现自定义字体。首先,我在导航抽屉中的自定义字体有问题。这似乎不起作用。所以我决定试试Actionbar的标题,但我也有同样的问题 我找到了这个网站,决定试试看 我创建了一个自定义java文件,代码如下: package vimen.vimenlogin; import android.content.Context; import android.graphics.Paint; import android.graphics.Typeface;
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);
}
但是,我得到了这个错误
,原因是:java.lang.RuntimeException:native typeface无法与崩溃的应用程序结合使用。typeface span
没有字体路径。它仅适用于内置字体系列。从代码片段中无法判断您使用的是字体span
还是内置的字体span
(专业提示:使用与字体span
不同的类名)
错误消息通常意味着Android无法找到字体文件,或者由于某种原因无法解释它。根据您的代码,您的字体文件需要:
assets/fonts/fonts/Raleway-Bold.ttf
在您的项目中,因为您的字体span
和使用字体span
都有字体。如果字体文件不存在,请将其移动或修改代码以引用其实际位置。但这就是自定义类forThanks的功能,问题确实是重复使用了/font/
。您知道我是否也可以对导航抽屉使用此方法吗?@user3740505:导航抽屉只是一个列表视图
。您负责如何在列表视图中呈现行,包括使用何种字体。