Frage

Ich versuche, eine benutzerdefinierte Schriftart für eine Textview auf Android zu verwenden, im Anschluss an die Führung hier . Unter Verwendung der gleichen Schriftart, denselben Code, alles gleich, ich dies 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

Ich verwende die Schrift Molot.otf, die erfolgreich in einem der Blogs verwendet wurde. Ich bin auch mit predator.ttf, einem anderen benutzerdefinierten Schriftart aber im Truetype-Format.

Relevante 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 dies verursachen? Er arbeitete für die Menschen in den Blogs, also warum nicht ich? Hat etwas wesentliche Änderung der API, die mich zu tun, dies hindert?

War es hilfreich?

Lösung

Android bietet keine Unterstützung für Opentype (OTF), nur Truetype (TTF), so dass Ihre Molot.otf Schrift wahrscheinlich nicht funktionieren. Ich schrieb diese beiden Blog-Beiträge, die Sie in Ihrem ersten Satz verlinken auf (das ist eine Raubkopie des anderen), und sie nicht Molot.otf verwenden.

(BTW, ich etwas repariert die Formatierung der Post - AndroidGuys hält Wordpress-Hosts zu ändern, und so meine älteren Beiträge schrecklich gebrochen sind in Bezug auf der Formatierung)

.

Bearbeiten . Wie in den Kommentaren erwähnt, Android DOES jetzt Unterstützung OTF

Andere Tipps

ich auch die gleichen Fehler und ich habe Lösung folgen.

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

Sie in Eclipse setzen fonts/Molot.otf in assets/fonts Ordner muss.

, nachdem Sie es laufen kann.

, wenn Sie es nicht ausführen können erfolgreiche Sie senden können proplem über

Leider ist die Schrift nicht gemacht werden kann Fehler sind nicht sehr spezifisch, und es kann das Ergebnis vieler Dinge falsch gehen. Es ist wichtig, zwei Dinge zu überprüfen:

  • Die erste und wichtigste: Die Datei gefunden wird
  • Die Schrift ist gültig in Ihrem Gerät.

Der beste Weg ist die Schriftdatei für eine bekannte gültige Font-Datei zu ändern.
Wenn es fehlschlägt, dann ist es das erste Problem.
Wenn nicht, dann ist es die zweite, so dass Sie für eine andere Schriftart mit FontForge oder Look werden beschäftigen müssen.

Check Schrift Name und Erweiterung. es ist Groß- und Kleinschreibung und wahrscheinlich alle Kappen. zB.

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

Zu Ihrer Information. Mein Grund für den Absturz ist aus irgendeinem Grund Eclipse verursacht. Alles, was ich tat, ist nur das Projekt Reinigung und lief wieder, dann funktioniert es.

Zum einen habe ich versucht, die benutzerdefinierte Schriftart in meinem Test-Projekt, das ich einige neue functions.It auf das erste Mal gearbeitet, um zu versuchen. Aber es hat nicht die Arbeit an dem Projekt auf ich arbeite, bis ich tat, wie oben.

So versuchen, so viele Methoden wie möglich.

Android funktioniert Unterstützung OTF-Dateien für Schriften, wenn Sie dieses Problem konfrontiert sind, stellen Sie sicher, dass Sie den richtigen Weg für die font.put Schriftart in den Ordner Schriftarten innerhalb Assets sind Einstellungsordner und erstellen Sie die Schrift wie folgt:

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

@deng seine Antwort für mich gearbeitet ":

Check Schrift Name und Erweiterung. es ist Groß- und Kleinschreibung und wahrscheinlich alle Kappen. zB.

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

Sie sollten Ihre Schrift mit 'Fontlab' Software in binärem mod bearbeiten.

Android funktioniert Unterstützung OTF-Dateien für Schriften, wenn Sie dieses Problem konfrontiert sind, stellen Sie sicher, dass Sie den richtigen Weg für die Schriftart sind einstellen, zum Beispiel, wenn Sie die Datei fontname.otf haben, legen Sie sie in einem Ordner Schriftarten innerhalb Assets Ordner und die Schriftart erstellen wie folgt:

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");

(Pfad Argument sollte nicht mit „/“ beginnen) und der Dateiname sollte auch keine Sonderzeichen oder ein „-“ und sollte in Kleinbuchstaben

sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top