J'essaie d'utiliser une police personnalisée pour un TextView sur Android, en suivant le guide ici . En utilisant la même police, le même code, le même tout, j'obtiens ceci dans 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
J'utilise la police Molot.otf, qui a été utilisée avec succès dans l'un des blogs. J'utilise également predator.ttf, une autre police personnalisée mais au format TrueType.
Code pertinent :
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);
}
}
et
<?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>
Quelle en serait la cause ? Cela a fonctionné pour les personnes figurant sur les blogs, alors pourquoi pas pour moi ? Quelque chose d'important a changé dans l'API qui m'empêche de le faire ?
6 votes
J'ai eu cette erreur et je me suis demandé ce qu'elle signifiait, puis j'ai compris que cela se produisait parce que il n'a pas pu trouver le fichier à charger . Bien que cela n'ait aucun rapport avec ce message, que je n'ai même pas lu, je le publie ici parce que c'est le seul résultat que j'obtiens sur Google en cherchant cette erreur, donc je suppose que cela vaut la peine d'être signalé.
1 votes
Je pense que c'était aussi le problème dans ma situation, mais je ne suis pas sûr. J'ai fini par faire beaucoup de bricolage et j'ai réussi à le faire fonctionner.
2 votes
Apparemment, Android n'aime pas non plus les situations où le nom de fichier de la police ne correspond pas au nom (intégré) de la police. J'ai obtenu exactement la même exception après avoir simplement renommé le fichier ttf.
6 votes
J'ai eu le même problème que Lohoris. J'ai refactorisé mon code et j'ai oublié d'inclure le fichier de police dans mon projet (dans mon cas, dans Assets/fonts).
2 votes
@lohoris merci, c'était mon problème. je vous aurais +1 si vous l'aviez écrit comme réponse :)