Quiero usar una fuente personalizada para mi aplicación de Android que estoy creando.
Puedo cambiar individualmente el tipo de letra de cada objeto desde Code, pero tengo cientos de ellos.
Entonces,
- ¿Hay alguna forma de hacer esto desde XML? [Configuración de un tipo de letra personalizado]
- ¿Hay alguna manera de hacerlo desde el código en un solo lugar, para decir que toda la aplicación y todos los componentes deben usar el tipo de letra personalizado en lugar del predeterminado?
Respuestas:
No lo siento. Solo puede especificar los tipos de letra integrados a través de XML.No que yo sepa.Hay una variedad de opciones para estos hoy en día:
Recursos de fuentes y backports en el SDK de Android, si está utilizando
appcompat
Bibliotecas de terceros para quienes no las utilizan
appcompat
, aunque no todas admitirán la definición de la fuente en los recursos de diseñofuente
Sí, es posible.
Tienes que crear una vista personalizada que amplíe la vista de texto.
En
attrs.xml
envalues
carpeta:En
main.xml
:En
MyTextView.java
:fuente
TextView
. Requerirá subclases personalizadas para cada clase de widget que herede deTextView
donde se desea la misma capacidad.Hice esto de una manera más "de fuerza bruta" que no requiere cambios en el diseño XML o Actividades.
Probado en la versión de Android 2.1 a 4.4. Ejecute esto al iniciar la aplicación, en su clase de aplicación:
Para obtener un ejemplo más completo, consulte http://github.com/perchrh/FontOverrideExample
fuente
code
<style name = "AppTheme" parent = "AppBaseTheme"> <item name = "android: typeface"> monospace </item> </style>code
, funciona pero no para negrita. Agregué este código en una clase que extiende Application. ¿Es ese el lugar correcto? @ P-chanAunque estoy votando positivamente la respuesta de Manish como el método más rápido y más específico, también he visto soluciones ingenuas que simplemente iteran recursivamente a través de una jerarquía de vistas y actualizan los tipos de letra de todos los elementos a su vez. Algo como esto:
Debería llamar a esta función en sus vistas después de inflar el diseño y en los
onContentChanged()
métodos de su Actividad .fuente
Pude hacer esto de manera centralizada, aquí está el resultado:
Tengo lo siguiente
Activity
y lo extiendo si necesito fuentes personalizadas:Pero si estoy usando una actividad del paquete de soporte, por ejemplo,
FragmentActivity
entonces uso estoActivity
:No he probado este código con
Fragment
s todavía, pero espero que funcione.Mi
FontUtils
es simple, que también resuelve el problema anterior a ICS mencionado aquí https://code.google.com/p/android/issues/detail?id=9904 :fuente
¡Oye, también necesito 2 fuentes diferentes en mi aplicación para diferentes widgeds! Yo uso de esta manera:
En mi clase de aplicación creo un método estático:
El tipo de letra String representa el xyz.ttf en la carpeta de activos. (Creé una clase de constantes) Ahora puedes usar esto en cualquier lugar de tu aplicación:
El único problema es que lo necesita para cada widget en el que desee utilizar la fuente. Pero creo que esta es la mejor manera.
fuente
Usando la sugerencia de pospi y trabajando con la propiedad 'etiqueta' como Richard hizo , creé una clase personalizada que carga mis fuentes personalizadas y las aplica a las vistas de acuerdo con sus etiquetas.
Entonces, básicamente, en lugar de configurar TypeFace en el atributo android: fontFamily, está utilizando el atributo android: tag y configúrelo en una de las enumeraciones definidas.
En tu Actividad o Fragmento solo llamas
fuente
Encontré una buena solución en el blog de Lisa Wray . Con el nuevo enlace de datos, es posible establecer la fuente en sus archivos XML.
En XML:
fuente
Creo que puede haber una forma más práctica de hacerlo. La siguiente clase establecerá un tipo de letra personalizado para todos los componentes de su aplicación (con una configuración por clase).
fuente
Las implementaciones predeterminadas de LayoutInflater no admiten la especificación del tipo de letra de xml. Sin embargo, lo he visto hecho en xml al proporcionar una fábrica personalizada para LayoutInflater que analizará dichos atributos de la etiqueta xml.
A la estructura básica le gustaría esto.
Este artículo proporciona una explicación más detallada de estos mecanismos y cómo el autor intenta proporcionar soporte de diseño xml para tipos de letra de esta manera. El código para la implementación del autor se puede encontrar aquí .
fuente
Establecer una fuente personalizada a un ProgressDialog / AlertDialog regular:
fuente
Sí, es posible anulando el tipo de letra predeterminado. Seguí esta solución y funcionó como un encanto para todos los textos de TextViews y ActionBar también con un solo cambio.
styles.xml
En lugar de themes.xml como se menciona en el enlace anterior, mencioné la fuente predeterminada para anular en mi styles.xml en la etiqueta de tema de mi aplicación predeterminada. Los tipos de letra predeterminados que se pueden sobrescribir son serif, sans, monospace y normal.
TypefaceUtil.java
Inicialmente, no sabía que los tipos de letra que se sobrescribían son fijos y tienen valores definidos, pero finalmente me ayudó a comprender cómo trata Android las fuentes y los tipos de letra y sus valores predeterminados, que es un punto diferente por supuesto.
fuente
No sé si cambia toda la aplicación, pero he logrado cambiar algunos componentes que de otra manera no se podrían cambiar haciendo esto:
fuente
Me gusta la sugerencia de pospi. ¿Por qué no usar la propiedad 'etiqueta' de una vista (que puede especificar en XML - 'android: etiqueta') para especificar cualquier estilo adicional que no pueda hacer en XML? Me gusta JSON, así que usaría una cadena JSON para especificar un conjunto de clave / valor. Esta clase hace el trabajo, solo llame
Style.setContentView(this, [resource id])
a su actividad.Obviamente, querrá manejar más que solo el tipo de letra para que valga la pena usar JSON.
Una ventaja de la propiedad 'etiqueta' es que puede establecerla en un estilo base que usa como tema y, por lo tanto, hacer que se aplique a todas sus vistas automáticamente. EDITAR: Hacer esto da como resultado un bloqueo durante la inflación en Android 4.0.3. Aún puede usar un estilo y aplicarlo a las vistas de texto individualmente.
Una cosa que verá en el código, algunas vistas tienen una etiqueta sin que se establezca una explícitamente, extrañamente es la cadena 'Αποκοπή', que está 'cortada' en griego, según el traductor de Google. Que demonios...?
fuente
La respuesta de @ majinboo se revisó para la gestión del rendimiento y la memoria. Cualquier actividad relacionada con la necesidad de más de una fuente puede usar esta clase de fuente dando el propio constructor como parámetro.
La clase de fuentes revisadas es la siguiente:
fuente
Trabajando para Xamarin.Android:
Clase:
Implementación de la aplicación:
Estilo:
fuente
Parece que el uso de fuentes personalizadas se ha simplificado con Android O, básicamente puedes usar xml para lograrlo. Adjunté un enlace a la documentación oficial de Android como referencia, y espero que esto ayude a las personas que aún necesitan esta solución. Trabajar con fuentes personalizadas en Android
fuente
Puede ser útil saber que a partir de Android 8.0 (API nivel 26) puede utilizar una fuente personalizada en XML .
En pocas palabras, puede hacerlo de la siguiente manera.
Pon la fuente en la carpeta
res/font
.Úselo en el atributo de un widget
<Button android:fontFamily="@font/myfont"/>
o ponerlo en
res/values/styles.xml
y úsalo como estilo
fuente
Utilice el atributo "fontPath" directamente en el archivo xml.
para usar en style.xml
<item name = "fontPath"> fuentes / ProximaNovaSemibold.ttf </item>
para usar en archivo de diseño directo
fontPath = "fuentes / ProximaNovaBold.ttf"
(Nota: No es necesario utilizar el atributo de aplicación / android en el prefijo)
fuente
Absolutamente posible. Muchas formas de hacerlo. La forma más rápida es crear una condición con el método try-catch. Pruebe su condición de estilo de fuente determinada, detecte el error y defina el otro estilo de fuente.
fuente