"RuntimeException: tipo de letra nativo no se puede hacer" al cargar la fuente

Estoy intentando utilizar una fuente personalizada para un TextView en Android, siguiendo la guía aquí y aquí . Usando la misma fuente, el mismo código, lo mismo todo, lo obtengo 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 usó 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: orientación = "vertical"
     Android: layout_width = "fill_parent"
     Androide: layout_height = "fill_parent">
     <TextView
         Android: id = "@ + id / CustomFontText"
         Android: layout_width = "wrap_content"
         Android: layout_height = "wrap_content"
         Android: textSize = "30sp"
         Android: text = "Aquí hay texto.">
         </ TextView>
 </ LinearLayout>

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

Android no admite OpenType (OTF), sólo TrueType (TTF), por lo que su fuente Molot.otf probablemente no funcionará. Escribí ambos artículos de blog a los que enlazas en tu oración inicial (el uno es una copia pirata del otro), y no usan Molot.otf .

(BTW, un poco reparado el formato de ese post – AndroidGuys sigue cambiando los hosts de WordPress, y por lo tanto mis posts más antiguos están terriblemente rotos en términos de formato).

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

También consigo el mismo error y tengo la solución sigue.

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

Debe colocar fonts/Molot.otf en la carpeta assets/fonts en su Eclipse.

Después de que pueda ejecutarlo.

Si no puede ejecutarlo con éxito puede enviar proplem vía

Desafortunadamente, la tipografía no se puede hacer el 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: ¡El archivo se encuentra!
  • La fuente es válida en tu dispositivo.

La mejor manera es cambiar el archivo de fuente para un archivo de fuente válido conocido.
Si falla, entonces es el primer problema.
Si no, es la segunda, por lo que tendrá que tratar con FontForge o buscar otra fuente.

Verifique el nombre y la extensión de la fuente. Es sensible a mayúsculas y minúsculas y probablemente todas las tapas. p.ej.

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

FYI. Mi razón para el accidente es alguna razón causada por Eclipse. Todo lo que hice fue limpiar el proyecto y volver a funcionar, entonces funciona.

En primer lugar, he intentado la fuente personalizada en mi proyecto de prueba que utilizo para probar algunas nuevas funciones. Trabajó en la primera vez. Pero no funcionó en el proyecto en el que estoy trabajando hasta que hice lo anterior.

Así que intenta tantos métodos como puedas.

Debe editar su fuente con el software 'Fontlab' en mod. Binario.

@deng su respuesta funcionó para mí ":

Verifique el nombre y la extensión de la fuente. Es sensible a mayúsculas y minúsculas y probablemente todas las tapas. p.ej.

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

Android soporta archivos OTF para Typefaces, si se enfrenta a este problema, asegúrese de que está configurando la ruta correcta para la fuente, por ejemplo, si tiene el archivo fontname.otf, póngalo en una carpeta de fuentes dentro de los recursos Carpeta y crear el tipo de letra como sigue:

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

(El argumento path no debe comenzar con "/") y el nombre del archivo no debe incluir caracteres especiales o un "-" y debe estar en minúsculas

  • Excepción de tiempo de ejecución extra cuando se ejecuta una aplicación de Android en algunos dispositivos
  • La aplicación de Android se bloquea en la generación de versiones con el uso de Proguard y Dagger
  • Java.lang.RuntimeException: No se puede inicializar el motor de efecto para type: 0bed4300-ddd6-11db-8f34-0002a5d5c51b Error: -3
  • Java.lang.RuntimeException Theme.Sherlock
  • GdxRuntimeException en Android: no se pudo cargar la biblioteca compartida 'gdx' para el destino
  • Excepción: las devoluciones de llamada deben establecer los límites de los padres en populateNodeForVirtualViewId ()
  • La aplicación de Android falla al cargarse en algunos teléfonos en PathClassLoader
  • ¿Llamando startActivity () desde fuera de una Actividad?
  • ¿Cómo depurar correctamente Java (Android) usando Eclipse?
  • Java.lang.RuntimeException: Handler (android.os.Handler) envío de mensajes a un Handler en un hilo muerto
  • RuntimeException utilizando Camera.open ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.