Estoy tratando de definir un diseño de GUI usando archivos XML en Android. Hasta donde puedo averiguar, no hay forma de especificar que sus widgets deben usar una fuente personalizada (por ejemplo, una que haya colocado en los activos / fuente /) en archivos XML y solo puede usar las fuentes instaladas en el sistema.
Sé que, en el código Java, podría cambiar la fuente de cada widget de forma manual utilizando ID únicos. Alternativamente, podría iterar sobre todos los widgets en Java para hacer este cambio, pero esto probablemente sería muy lento.
¿Qué otras opciones tengo? ¿Hay alguna forma mejor de hacer widgets que tengan un aspecto personalizado? En particular, no quiero tener que cambiar manualmente la fuente para cada nuevo widget que agregue.
Respuestas:
Puede ampliar TextView para establecer fuentes personalizadas como aprendí aquí .
TextViewPlus.java:
attrs.xml: (en res / valores)
main.xml:
Pondría "saxmono.ttf" en la carpeta de activos .
ACTUALIZACIÓN 1/8/13
Hay serios problemas de memoria con este método. Ver el comentario de chedabob a continuación.
fuente
xmlns:foo="http://schemas.android.com/apk/res/com.example
Llego 3 años tarde a la fiesta :( Sin embargo, esto podría ser útil para alguien que pueda tropezar con esta publicación.
He escrito una biblioteca que almacena en caché los tipos de letra y también le permite especificar tipos de letra personalizados directamente desde XML. Puedes encontrar la biblioteca aquí .
Así es como se vería su diseño XML, cuando lo use.
fuente
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
pero eso no funcionó.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Puede que sea un poco tarde, pero debe crear una clase singleton que devuelva el tipo de letra personalizado para evitar pérdidas de memoria.
Tipo de clase de rostro:
TextView personalizado:
Por xml:
Programáticamente:
fuente
Antigua pregunta, pero desearía leer esta respuesta aquí antes de comenzar mi propia búsqueda de una buena solución. Calligraphy extiende el
android:fontFamily
atributo para agregar soporte para fuentes personalizadas en su carpeta de activos, de esta manera:Lo único que tiene que hacer para activarlo es adjuntarlo al contexto de la actividad que está utilizando:
También puede especificar su propio atributo personalizado para reemplazar
android:fontFamily
También funciona en temas, incluido el AppTheme.
fuente
Usando DataBinding :
En XML:
el archivo de fuente debe estar en
assets/fonts/
fuente
Si solo tiene un tipo de letra que desea agregar y desea escribir menos código, puede crear un TextView dedicado para su fuente específica. Ver el código a continuación.
En main.xml, ahora puede agregar su TextView de esta manera:
fuente
La mejor manera de hacerlo Desde la versión de vista previa de Android O es de esta manera
1.) Haga clic derecho en la carpeta res y vaya a Nuevo> directorio de recursos de Android .
Aparece la ventana Nuevo directorio de recursos.
2.) En la lista Tipo de recurso, seleccione la fuente y luego haga clic en Aceptar.
3.) Agregue sus archivos de fuentes en la carpeta de fuentes . La estructura de carpetas a continuación genera R.font.dancing_script, R.font.la_la y R.font.ba_ba.
4.) Haga doble clic en un archivo de fuente para obtener una vista previa de las fuentes del archivo en el editor.
Luego debemos crear una familia de fuentes
1.) Haga clic derecho en la carpeta de fuentes y vaya a Nuevo> Archivo de recursos de fuentes . Aparece la ventana Nuevo archivo de recursos.
2.) Ingrese el nombre del archivo y luego haga clic en Aceptar . El nuevo recurso XML de fuente se abre en el editor.
3.) Adjunte cada archivo de fuente, estilo y atributo de peso en el elemento de etiqueta de fuente. El siguiente XML ilustra la adición de atributos relacionados con la fuente en el recurso XML de fuente:
Agregar fuentes a un TextView:
A partir de la documentación
Todos los pasos son correctos.
fuente
Extienda
TextView
y dele un atributo personalizado o simplemente use el atributo android: tag para pasar una Cadena de la fuente que desea usar. Deberá elegir una convención y cumplirla, ya que pondré todas mis fuentes en la carpeta res / assets / fonts / para que su clase TextView sepa dónde encontrarlas. Luego, en su constructor, simplemente configura la fuente manualmente después de la súper llamada.fuente
La única forma de usar fuentes personalizadas es a través del código fuente.
Solo recuerde que Android se ejecuta en dispositivos con recursos y fuentes muy limitados que pueden requerir una buena cantidad de RAM. Las fuentes Droid incorporadas están especialmente hechas y, si lo notas, faltan muchos caracteres y decoraciones.
fuente
Podría tener una respuesta simple para la pregunta sin extender TextView e implementar un código largo.
Código:
Coloque el archivo de fuente personalizado en la carpeta de activos como de costumbre e intente esto. Esto funciona para mi. Simplemente no entiendo por qué Peter ha dado un código tan grande para esta cosa simple o ha dado su respuesta en la versión anterior.
fuente
También se puede definir en el xml sin crear clases personalizadas
style.xml
activity_main.xml
Una nota rápida, porque siempre olvidé dónde colocar las fuentes, es que la fuente debe estar dentro
assets
y esta carpeta reside en el mismo nivel queres
ysrc
, en mi caso, esassets/fonts/ionicons.ttf
Se agregó el diseño de raíz agregado porque este método debe
xmlns:app="http://schemas.android.com/apk/res-auto"
funcionarActualización 2 Olvidé una biblioteca que instalé antes llamada Calligraphy
fuente
xmlns:app="http://schemas.android.com/apk/res-auto"
a su diseño raíz, verifique también la respuesta actualizadaLa respuesta de Peter es la mejor, pero puede mejorarse usando styles.xml de Android para personalizar sus fuentes para todas las vistas de texto en su aplicación.
Mi codigo esta aqui
fuente
Hay dos formas de personalizar las fuentes:
!!! mi fuente personalizada en assets / fonts / iran_sans.ttf
Camino 1: Refrection Typeface.class |||mejor manera
llamar a FontsOverride.setDefaultFont () en la clase extiende la aplicación, este código hará que se cambien todas las fuentes de software, incluso las fuentes Toast
AppController.java
FontsOverride.java
Camino 2: use setTypeface
para una vista especial solo llame a setTypeface () para cambiar la fuente.
CTextView.java
FontUtils.java
fuente
Aquí hay un tutorial que le muestra cómo configurar una fuente personalizada como @peter describe: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
También tiene en cuenta las posibles pérdidas de memoria en http://code.google.com/p/android/issues/detail?id=9904 . También en el tutorial hay un ejemplo para configurar una fuente personalizada en un botón.
fuente
Puede crear fácilmente una clase de vista de texto personalizada: -
Entonces, lo que debes hacer primero, crea una
Custom textview
clase que se extienda conAppCompatTextView
.Ahora, cada vez que la vista de texto personalizado llame y obtendremos el valor int del atributo
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.O
También podemos obtener getTypeface () de la vista que configuramos en nuestro xml (
android:textStyle="bold|normal|italic"
). Así que haz lo que quieras hacer.Ahora,
FontUtils
establecemos cualquier fuente .ttf en nuestra vista.fuente
Puede ser útil saber que a partir de Android 8.0 (API nivel 26) puede usar una fuente personalizada en XML .
Puede aplicar una fuente personalizada a toda la aplicación de la siguiente manera.
Pon la fuente en la carpeta
res/font
.En
res/values/styles.xml
uso en el tema de la aplicación.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
fuente
Fontinator es una biblioteca de Android que facilita el uso de fuentes personalizadas. https://github.com/svendvd/Fontinator
fuente
No puede extender TextView para crear un widget o usar uno en un diseño de widgets: http://developer.android.com/guide/topics/appwidgets/index.html
fuente