ändern - java swing font




"RuntimeException: native Schriftart kann nicht erstellt werden" beim Laden der Schriftart (6)

Ich versuche, eine benutzerdefinierte Schriftart für ein TextView auf Android zu verwenden, dem Führer here und here folgend. Ich benutze die gleiche Schriftart, den gleichen Code und alles, ich bekomme das in 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

Hmm okay. Ich verwende die Schriftart Molot.otf, die erfolgreich in einem der Blogs verwendet wurde. Ich benutze auch predator.ttf, eine andere benutzerdefinierte Schriftart, aber im TrueType-Format

Relevanter Code:

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);
        }
    }

und

<?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>

Was würde das verursachen? Es hat für die Leute in den Blogs funktioniert, also warum nicht ich? Hat sich etwas an der API geändert, das mich davon abhält?


Überprüfen Sie den Namen und die Erweiterung der Schriftart. Es ist Groß- / Kleinschreibung und wahrscheinlich alle Großbuchstaben. z.B.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")

@deng seine Antwort hat für mich funktioniert ":

Überprüfen Sie den Namen und die Erweiterung der Schriftart. Es ist Groß- / Kleinschreibung und wahrscheinlich alle Großbuchstaben. z.B.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")

Android unterstützt OTF-Dateien für Schriftarten. Wenn Sie mit diesem Problem konfrontiert sind, stellen Sie sicher, dass Sie den richtigen Pfad für die font.put-Schriftart in Ordner-Schriftarten im Ordner "Assets" festlegen und die Schriftart wie folgt erstellen:

Typeface typeface = Typeface.createFromAsset(getAssets(), "font/StencilStd.otf");
TextView text = (TextView) findViewById(R.id.textView);
text.setTypeface(typeface);

Android unterstützt nicht OpenType (OTF), nur TrueType (TTF), daher wird Ihre Schriftart Molot.otf wahrscheinlich nicht funktionieren. Ich habe beide Blogposts geschrieben, auf die Sie in Ihrem Eröffnungssatz verlinken (der eine ist eine Raubkopie des anderen), und sie verwenden Molot.otf .

(BTW, ich reparierte etwas die Formatierung dieses Pfostens - AndroidGuys ändert WordPress-Gastgeber, und so sind meine älteren Pfosten bezüglich der Formatierung schrecklich gebrochen).

EDIT : Wie in den Kommentaren angegeben, unterstützt Android jetzt OTF.


Ich bekomme auch den gleichen Fehler und ich habe eine Lösung folgen.

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

Sie müssen fonts/Molot.otf im Ordner " assets/fonts " in Eclipse fonts/Molot.otf .

nachdem Sie es ausführen können.

Wenn Sie es nicht erfolgreich ausführen können, können Sie perplem via senden


Leider kann die Schrift nicht gemacht werden Fehler ist nicht sehr spezifisch, und es kann das Ergebnis vieler Dinge schief gehen. Es ist wichtig, auf zwei Dinge zu achten:

  • Das erste und wichtigste: Die Datei ist gefunden!
  • Die Schriftart ist in Ihrem Gerät gültig.

Der beste Weg ist, Ihre Font-Datei für eine bekannte gültige Font-Datei zu ändern.
Wenn es fehlschlägt, dann ist es das erste Problem.
Wenn nicht, ist es die zweite, also müssen Sie sich mit FontForge oder nach einer anderen Schriftart suchen.