"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.access00(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
Мда... окей. Я использую шрифт "Молот".ОТФ, который успешно использовался в одном из блогов. Я также использую хищника.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, что мешает мне это сделать?
9 ответов:
Android не поддерживает OpenType (OTF), только TrueType (TTF), поэтому ваш
Molot.otf
шрифт, вероятно, не будет работать. Я написал оба этих сообщения в блоге, на которые вы ссылаетесь в своем вступительном предложении (один является пиратской копией другого), и они не используютMolot.otf
.(кстати, я несколько восстановил форматирование этого сообщения - AndroidGuys продолжает менять хосты WordPress, и поэтому мои старые сообщения ужасно разбиты с точки зрения форматирования).
EDIT: как говорится в комментарии, Android тут теперь поддержка OTF.
Я также получаю ту же ошибку и у меня есть решение следовать.
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf")
вы должны поставить
fonts/Molot.otf
inassets/fonts
папка в затмение.после того, как вы можете запустить его.
Если вы не можете запустить его успешно, вы можете отправить задачу через
к сожалению,шрифт не может быть сделано ошибка не очень специфична, и это может быть результатом многих вещей, идущих не так. Важно проверить две вещи:
- первое и самое главное: файл найден!
- шрифт действителен в вашем устройстве.
лучший способ-изменить файл шрифта для известного допустимого файла шрифта.
Если это не удается, то это первая проблема.
Если нет, это вторая, так что вам придется иметь дело сFontForge
или искать другой шрифт.
проверьте имя и расширение шрифта. он чувствителен к регистру и, вероятно, все крышки. например.
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
к вашему сведению. Моя причина аварии-это какая-то причина, вызванная затмением. Все, что я сделал, это просто очистил проект и снова запустил, а затем он работает.
во-первых, я попробовал пользовательский шрифт в моем тестовом проекте, который я использую, чтобы попробовать некоторые новые functions.It работал на самый первый раз. Но это не сработало в проекте, над которым я работаю, пока я не сделал, как указано выше.
Так что попробуйте как можно больше методов, как вы можете.
Android поддерживает файлы OTF для шрифтов, если вы столкнулись с этой проблемой, убедитесь, что вы устанавливаете правильный путь для шрифта.поместите шрифт в папку шрифты внутри папки активов и создайте шрифт, как показано ниже:
Typeface typeface = Typeface.createFromAsset(getAssets(), "font/StencilStd.otf"); TextView text = (TextView) findViewById(R.id.textView); text.setTypeface(typeface);
@deng его ответ сработал для меня":
проверьте имя и расширение шрифта. он чувствителен к регистру и, вероятно, все крышки. например.
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
Android поддерживает файлы OTF для шрифтов, если вы столкнулись с этой проблемой, убедитесь, что вы устанавливаете правильный путь для шрифта, например, если у вас есть имя шрифта файла.otf, поместите его в папку fonts внутри папки assets и создайте шрифт следующим образом:
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");
(аргумент path не должен начинаться с"/") и имя файла не должно содержать специальных символов или " - " и должно быть в нижнем регистре