java - tipos - tipologia html




"RuntimeException: no se puede hacer el tipo de letra nativo" al cargar fuente (6)

@deng su respuesta funcionó para mí ":

verificar el nombre y la extensión de la fuente. es sensible a mayúsculas y minúsculas. p.ej.

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

Estoy intentando usar una fuente personalizada para un TextView en Android, siguiendo la guía here y here . Usando la misma fuente, el mismo código, el mismo todo, obtengo esto en 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, ok. Estoy usando la fuente Molot.otf, que se utilizó con éxito en uno de los blogs. También estoy usando predator.ttf, otra fuente personalizada pero en formato TrueType

Código relevante:

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

y

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

¿Qué estaría causando esto? Funcionó para las personas en los blogs, ¿por qué no yo? ¿Ha cambiado algo importante en la API que me impide hacer esto?


Android admite archivos OTF para Tipos de letra, si enfrenta este problema, asegúrese de establecer la ruta correcta para la fuente font.put en las fuentes de carpeta dentro de la carpeta de activos y cree el tipo de letra como se muestra a continuación:

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

Android no admite OpenType (OTF), solo TrueType (TTF), por lo que su fuente Molot.otf probablemente no funcionará. Escribí las dos publicaciones de blog a las que enlazas en tu frase inicial (la una es una copia pirateada de la otra), y no usan Molot.otf .

(Por cierto, de alguna manera reparé el formato de esa publicación: AndroidGuys sigue cambiando los servidores de WordPress, por lo que mis publicaciones más antiguas están terriblemente rotas en términos de formato).

EDITAR : Como se indica en los comentarios, Android ahora es compatible con OTF.


Debe editar su fuente con el software 'Fontlab' en modo binario.


Lamentablemente, el tipo de letra no se puede hacer error no es muy específico, y puede ser el resultado de muchas cosas que van mal. Es importante verificar dos cosas:

  • El primero y más importante: ¡se encuentra el archivo!
  • La fuente es válida en tu dispositivo.

La mejor manera es cambiar su archivo de fuente por un archivo de fuente válido conocido.
Si falla, entonces es el primer problema.
Si no, es el segundo, por lo que tendrás que lidiar con FontForge o buscar otra fuente.


También recibo el mismo error y tengo una solución a continuación.

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

debe poner las fonts/Molot.otf en la carpeta assets/fonts en su Eclipse.

después de que puedas ejecutarlo.

si no puede ejecutarlo con éxito, puede enviar proplem a través de