java - tipologia - tipo de letra en css
"RuntimeException: no se puede hacer el tipo de letra nativo" al cargar fuente (9)
@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 admite archivos OTF para Tipos de letra; si enfrenta este problema, asegúrese de establecer la ruta correcta para la fuente; por ejemplo, si tiene el archivo fontname.otf, póngalo en una carpeta dentro de los recursos de los recursos carpeta y crea la tipografía de la siguiente manera:
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");
(el argumento de la ruta no debe comenzar con "/") y el nombre del archivo no debe incluir caracteres especiales o un "-" y debe estar en minúsculas
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.
FYI. La razón del bloqueo es una razón causada por Eclipse. Todo lo que hice fue limpiar el proyecto y volver a funcionar, luego funciona.
En primer lugar, probé la fuente personalizada en mi proyecto de prueba que uso para probar algunas funciones nuevas. Funcionó la primera vez. Pero no funcionó en el proyecto en el que estoy trabajando hasta que hice lo anterior.
Entonces prueba tantos métodos como puedas.
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
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")