tipo teclado para moto letra fuentes fuente escribir como celular cambiar aplicacion android fonts typeface

android - para - como cambiar la letra del teclado del celular



"El tipo de letra nativo no se puede hacer" solo para algunas personas (15)

Tengo una aplicación que cambia la fuente tipográfica para algunos elementos. Funciona bien para la mayoría de las personas, pero tal vez un 0.5% obtenga una excepción cuando intente cambiar la fuente. La parte importante del seguimiento de la pila es esta:

Caused by: java.lang.RuntimeException: native typeface cannot be made at android.graphics.Typeface.<init>(Typeface.java:147) at android.graphics.Typeface.createFromAsset(Typeface.java:121)

Como digo, funciona para la mayoría de las personas, por lo que no creo que sea un problema con el archivo de fuente o mi código. ¿Alguna sugerencia sobre cómo solucionar esto?

Editar: Este es mi código:

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "fonts/CharisSILR.ttf"); TextView tv; tv = ((TextView) findViewById(R.id.searchPronunciationTitle)); tv.setTypeface(phoneticFont);


Cambia esto

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "fonts/CharisSILR.ttf");

a

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "CharisSILR.ttf");


Debe crear una carpeta de recursos dentro de src -> main en AndroidStudio. ¡De esta manera funcionó!


En mi caso,

Solo uso el código anterior ... Así que me olvido del archivo de fuentes en la carpeta de activos ...

Pero no puedo entender por 2 horas ...

Posibles casos para este error,

  1. Falta el archivo de fuente
  2. Nombre de fuente incorrecto o extensión de fuente incorrecta

por ej .: fonts / roboto.ttf en lugar de fonts / roboto.otf


En mi caso, estaba basado en el nombre de archivo de la fuente. Por alguna razón, se llamaba FontName..ttf

No sé por qué los puntos dobles estaban allí - busqué la fuente original y estaban en mi carpeta windows / fonts como FontName..ttf. Windows aparentemente no le importaba, pero Android se asustó. Cambié el nombre del archivo y ahora todo está feliz.


En mi caso, simplemente eliminé la carpeta de activos (que creé manualmente) y acabo de crear una nueva usando el asistente. Aparentemente no se leyó como la carpeta de activos, sino que se leyó como una carpeta normal, por lo que getAssets () no funcionó y me dio el error.


En nuestra situación, habíamos empleado la solución de Hit con el caché. El problema que presentamos fue que estábamos probando archivos OTF Y archivos TTF dentro del mismo bloque try;) que obviamente va a fallar en el primer intento de OTF si está buscando obtener un TTF, pero pensé que valía la pena publicarlo SOLO en caso de que se le escapara, pasó la notificación de alguien mientras intentaban la misma solución.

protected static Typeface getTypeface(Context p_context, String p_fontName){ Typeface tf = null; try { tf = Typeface.createFromAsset(p_context.getAssets(), "fonts/" + p_fontName + ".otf"); }catch(Exception e) {} if( tf != null ) return tf; try { tf = Typeface.createFromAsset(p_context.getAssets(), "fonts/" + p_fontName + ".ttf"); }catch(Exception e) {} return tf; }


Estaba luchando con esto mucho. Intenté todas las posibilidades y nada me ayudó. Al final, el problema estaba en otro lado. Si está construyendo su proyecto con Gradle, no olvide agregar estas líneas en el archivo build.gradle. Esto resolvió el problema en mi caso.

sourceSets { main { assets.srcDirs = [''assets''] } }


Este error del SO Android podría ser el motivo de tu problema:

Typeface.createFromAsset filtra la corriente de activos

Donde también hay una solución en este informe de error:

Modifiqué la solución temporal de HTH para que el método no asumiera la ruta o el formato de la fuente. La ruta completa del elemento fuente debe enviarse como un parámetro. También completé la llamada a createFromAsset () en un bloque try-catch para que el método get () devuelva null si no se encuentra el activo.

public class Typefaces { private static final String TAG = "Typefaces"; private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>(); public static Typeface get(Context c, String assetPath) { synchronized (cache) { if (!cache.containsKey(assetPath)) { try { Typeface t = Typeface.createFromAsset(c.getAssets(), assetPath); cache.put(assetPath, t); } catch (Exception e) { Log.e(TAG, "Could not get typeface ''" + assetPath + "'' because " + e.getMessage()); return null; } } return cache.get(assetPath); } } }



Hacer con minúsculas:

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "fonts/charissilr.ttf");

Recuerde también cambiar el nombre del archivo.


Me encontré con este problema cuando estaba usando MagicTextView de qwerjk. Traté de poner la clase de MTV en una biblioteca y usarla en mi proyecto principal. Así es como lo hice funcionar:

  1. En la carpeta de activos principales del proyecto, cree una subcarpeta llamada fuentes
  2. Copie el archivo ttf en la carpeta assets / fonts. Mi nombre de archivo era camelcase (por ejemplo, ReservoirGrunge.ttf) y, por lo tanto, las mayúsculas o las mayúsculas no parecen importar.
  3. En mi proyecto principal inflé la vista de MTV desde xml. Asegúrese de que MagicTextView apunta a la ruta correcta de la biblioteca. Por ejemplo, mi biblioteca de clase de MTV era com.library.library_magictextview.MagicTextView y, por lo tanto, el xml de mi vista principal tenía que leer:

    <com.library.library_magictextview.MagicTextView android:textSize= "50dp" android:textColor= "#ffffffff" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:textStyle= "bold" android:padding= "20dp" android:gravity= "center" r:strokeColor= "#FFff0000" r:strokeJoinStyle= "miter" r:strokeWidth= "5" r:typeface= "ReservoirGrunge" android:text= "BobDillon" />


Me encontré con este problema cuando importé un módulo que estaba destinado a admitir tanto proyectos de eclipse como proyectos de estilo de estudio de Android.

Resolví mi problema eliminando los activos del conjunto fuente como-

defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName ''1.0'' sourceSets { main { java.srcDirs = [''src''] res.srcDirs = [''res''] //assets.srcDirs = [''assets'']//commented this out because modlue was not having this directory manifest.srcFile ''AndroidManifest.xml'' } } }

O convertir el proyecto en un estilo de estudio de Android también puede resolver el problema, supongo.


Para mi caso, he encontrado que la carpeta de activos se encuentra en /main/java/assets pero deben estar en /main/assets


Seguí algunas de las soluciones que se encuentran aquí, sin éxito. Pensé que era algo realmente oscuro, como a menudo lo hacen los programadores. Entonces, en algún lugar que leí, podría estar relacionado con la ruta de la fuente, gotcha:

En lugar de:

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "blanch_caps.ttf");

Cambié a:

Typeface phoneticFont = Typeface.createFromAsset(getAssets(), "fonts/blanch_caps.ttf");

Y mi archivo está en assets / fonts / blanch_caps.ttf. ¡No funciona como un encanto!


en android studio: lo que funcionó para mí es poner el archivo ttf directamente en la carpeta assets sin una subcarpeta de fuentes, no funcionó con la subcarpeta ((getAssets (), "fonts / oldengl.ttf") no funcionó cuando tuve el ttf en src / main / assets / fonts). esto funciona: src / main / assets / oldengl.ttf Typeface customfont = Typeface.createFromAsset (getAssets (), "oldengl.ttf");