«RuntimeException: родная гарнитура не может быть создана» при загрузке шрифта

Я пытаюсь использовать пользовательский шрифт для TextView на Android, следуя инструкции здесь . Используя тот же шрифт, тот же код, все то же самое, я получаю это в adb logcat:

W/dalvikvm(  317): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime(  317): FATAL EXCEPTION: main
E/AndroidRuntime(  317): java.lang.RuntimeException: Unable to start activity  ComponentInfo{org.evilx.quacklock/org.evilx.quacklock.MainActivity}:             java.lang.RuntimeException: native typeface cannot be made
E/AndroidRuntime(  317):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(  317):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(  317):        at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(  317):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(  317):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  317):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  317):        at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  317):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  317):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  317):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  317):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  317):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  317): Caused by: java.lang.RuntimeException: native typeface cannot be made
E/AndroidRuntime(  317):        at android.graphics.Typeface.<init>(Typeface.java:147)
E/AndroidRuntime(  317):        at android.graphics.Typeface.createFromAsset(Typeface.java:121)
E/AndroidRuntime(  317):        at org.evilx.quacklock.MainActivity.onCreate(MainActivity.java:24)
E/AndroidRuntime(  317):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  317):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(  317):        ... 11 more
W/ActivityManager(   59):   Force finishing activity org.evilx.quacklock/.MainActivity
W/ActivityManager(   59): Activity pause timeout for HistoryRecord{43e80368 org.evilx.quacklock/.MainActivity}
D/dalvikvm(  247): GC_EXPLICIT freed 711 objects / 53160 bytes in 20922ms

Я использую шрифт Molot.otf, который был успешно использован в одном из блогов. Я также использую predator.ttf, другой нестандартный шрифт, но в формате TrueType.

Соответствующий код:

public class MainActivity extends Activity {
    // Called when the activity is first created.
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf");
        TextView tv = (TextView) findViewById(R.id.CustomFontText);
        tv.setTypeface(tf);
    }
}

и

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/CustomFontText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="Here is some text.">
    </TextView>
</LinearLayout>

Что будет причиной этого? Это работало на людей в блогах, так почему бы не я? Произошло ли что-то существенное изменение в API, которое мешало мне сделать это?

64 голоса | спросил TheLQ 11 J0000006Europe/Moscow 2010, 19:11:28

8 ответов


0

Android не поддерживает OpenType (OTF), только TrueType (TTF), поэтому ваш шрифт Molot.otf, вероятно, не будет работать. Я написал оба этих поста в блоге, на которые вы ссылаетесь в первом предложении (одно - пиратская копия другого), и они не используют Molot.otf

(Кстати, я несколько исправил форматирование этого поста - AndroidGuys постоянно меняет хосты WordPress, и поэтому мои старые посты ужасно ломаются с точки зрения форматирования).

РЕДАКТИРОВАТЬ . Как отмечалось в комментариях, Android ДЕЛАЕТ теперь поддерживает OTF.

ответил CommonsWare 11 J0000006Europe/Moscow 2010, 19:26:07
0

Я также получаю ту же ошибку, и у меня есть решение.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf")

вы должны поместить fonts/Molot.otf в assets/fonts папка в вашем Eclipse.

после того, как вы сможете запустить его.

если вы не можете запустить его успешно, вы можете отправить его через

ответил phuongnv 10 Mayam11 2011, 08:52:08
0

К сожалению, ошибка гарнитуры не может быть сделана не очень специфична, и это может быть следствием многих ошибок. Важно проверить две вещи:

  • Первое и самое важное: файл найден!
  • Шрифт действителен на вашем устройстве.

Лучший способ - изменить файл шрифта на известный действительный файл шрифта.
Если это не удается, то это первая проблема.
Если нет, то это второе, поэтому вам придется иметь дело с FontForge или искать другой шрифт.

ответил mamuso 26 +04002011-10-26T20:40:42+04:00312011bEurope/MoscowWed, 26 Oct 2011 20:40:42 +0400 2011, 20:40:42
0

проверьте имя и расширение шрифта. он чувствителен к регистру & наверное все заглавные буквы. например.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
ответил marcieng 12 +04002012-10-12T15:15:21+04:00312012bEurope/MoscowFri, 12 Oct 2012 15:15:21 +0400 2012, 15:15:21
0

FYI. Моя причина аварии - какая-то причина, вызванная Eclipse. Все, что я сделал, это просто очистил проект и снова запустил, затем он работает.

Во-первых, я попробовал пользовательский шрифт в своем тестовом проекте, который я использую, чтобы попробовать некоторые новые функции. Он работал с самого первого раза. Но это не работало над проектом, над которым я работаю, пока я не сделал, как указано выше.

Так что попробуйте как можно больше методов.

ответил Michelle 12 Jpm1000000pmThu, 12 Jan 2012 13:26:28 +040012 2012, 13:26:28
0

Android поддерживает файлы OTF для гарнитур. Если вы столкнулись с этой проблемой, убедитесь, что вы устанавливаете правильный путь для шрифта font.put в шрифты папки внутри папки assets и создаете гарнитуру, как показано ниже:

Typeface typeface = Typeface.createFromAsset(getAssets(), "font/StencilStd.otf");
TextView text = (TextView) findViewById(R.id.textView);
text.setTypeface(typeface);
ответил Hitesh Raviya 18 J000000Wednesday18 2018, 10:58:57
0

@deng его ответ сработал для меня ":

проверьте имя и расширение шрифта. он чувствителен к регистру & наверное все заглавные буквы. например.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
ответил user1693108 30 J000000Tuesday13 2013, 13:37:54
0

Вы должны отредактировать свой шрифт с помощью программного обеспечения 'Fontlab' в двоичном моде.

ответил ali shekari 28 J000000Sunday13 2013, 15:10:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132