在棒棒糖上找不到字体资产helvetica.ttf

时间:2014-11-18 05:04:04

标签: java android fonts android-5.0-lollipop

由于某种原因在棒棒糖上,我得到了这个错误,因为棒棒糖是如此新的我无法找到原因,我不知道如何解决它。在此先感谢Logcat错误:

java.lang.RuntimeException: Unable to start activity                                       
ComponentInfo{com.bent.MissionaryTracker/com.bent.MissionaryTracker.MainActivity}:          
java.lang.RuntimeException: Font asset not found helvetica.ttf
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.RuntimeException: Font asset not found helvetica.ttf
at android.graphics.Typeface.createFromAsset(Typeface.java:190)
at com.bent.MissionaryTracker.MainActivity.onCreate(MainActivity.java:57)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
... 10 more

编辑:这是导致错误的代码

    title = (TextView) findViewById(R.id.title);


    Typeface font = Typeface.createFromAsset(getAssets(), "helvetica.ttf");
    title.setTypeface(font);

我的项目文件夹中的assets文件夹中有helvetica.ttf。

编辑: 此应用程序适用于所有设备,直到5.0,所以由于某种原因5.0 5.0无法识别我的资产文件夹中的文件。

我试图在我的资源文件夹中发布它的截图,但我没有足够的声誉来发布图片。

8 个答案:

答案 0 :(得分:74)

如果您正在使用Android Studio,请确保您的资源文件夹位于main下,而不是res 这对我有用

答案 1 :(得分:31)

现在最好使用自定义字体this approach

将字体存储在 res / font

要使用字体:

Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);

答案 2 :(得分:29)

在我意识到我没有在.otf文件

之前放置“fonts /”之前,我也遇到了这个问题
$wpdb->query ("UPDATE $wpdb->postmeta SET `meta_value` = REPLACE(`meta_value`, \'%‚ %\') WHERE `meta_value` LIKE '‚'");

答案 3 :(得分:16)

这对我有用。在我的情况下,它不起作用,因为我在res中创建资产文件夹而不是在main中。

enter image description here

答案 4 :(得分:8)

如果更改目录不起作用,可能是由于Android团队已经修复了一个问题,但没有及时赶上5.0。这一切都在这里解释:

https://code.google.com/p/android-developer-preview/issues/detail?id=608&thanks=608&ts=1404735239

解决方法(至少对我而言)是使用TTX修复字体文件,如链接问题中所述。

如果您没有python专业知识,让TTX工作可能会有点麻烦,所以我最终下载了包含TTX的Adobe's AFDKO。你必须运行'ttx yourfontfile.ttf',它将你的文件转换为.ttx然后再次运行'ttx yourfontfile.ttx'以获得一个适用于5.0的新.ttf。

答案 5 :(得分:4)

我之前遇到过这个问题。我删除了x.ttf,然后解除了删除,尝试无锁运行。所以我的修复就是删除它并再次下载字体并将其粘贴到fonts /文件夹中,并且每件事情都运行良好。

答案 6 :(得分:4)

清理项目,它在android 6.0上帮助我

答案 7 :(得分:2)

好的伙计们,

我遇到了同样的问题。首先,我将字体加载逻辑崩溃证明:

/**
 * Init method. This method must be called before any other call in this class.
 */
public static void init () {
    fontPlain  = createFont( "helvetica.ttf" , Typeface.NORMAL );
    fontBold   = createFont( "helveticab.ttf", Typeface.BOLD   );
}

/**
 * Load font from assets font folder.
 */
public static Typeface createFont (String font, int style) {
    Typeface typeface;
    try {
        AssetManager assets = Kit.getAppContext().getAssets();
        typeface = Typeface.createFromAsset( assets, "fonts" + File.separator + font );
    }
    catch (RuntimeException e) {
        // createFromAsset() will throw a RuntimeException in case of error.
        Log.e( Constants.TAG, "Unable to create font: " + font, e );
        typeface = Typeface.defaultFromStyle( style );
    }
    return typeface;
}

然后我还在git中从这个项目中下载了另一种字体:

https://github.com/dimanchec3/Tutoriapps-Android/blob/master/assets/Helvetica.ttf

我意识到我的旧字体是56KB,这个新字体是84KB。我想我的字体版本较旧。

使用此字体前请确保您拥有正确的许可证。