Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序和ActionBar中的自定义字体_Java_Android_Fonts - Fatal编程技术网

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

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;

我整个下午都在绞尽脑汁在Android应用程序中实现自定义字体。首先,我在导航抽屉中的自定义字体有问题。这似乎不起作用。所以我决定试试Actionbar的标题,但我也有同样的问题

我找到了这个网站,决定试试看

我创建了一个自定义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);
}

但是,我得到了这个错误
,原因是:java.lang.RuntimeException:native typeface无法与崩溃的应用程序结合使用。

typeface span
没有字体路径。它仅适用于内置字体系列。从代码片段中无法判断您使用的是
字体span
还是内置的
字体span

(专业提示:使用与
字体span
不同的类名)

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

assets/fonts/fonts/Raleway-Bold.ttf

在您的项目中,因为您的
字体span
和使用
字体span
都有
字体。如果字体文件不存在,请将其移动或修改代码以引用其实际位置。

但这就是自定义类forThanks的功能,问题确实是重复使用了
/font/
。您知道我是否也可以对导航抽屉使用此方法吗?@user3740505:导航抽屉只是一个
列表视图
。您负责如何在
列表视图中呈现行,包括使用何种字体。