¿Es posible configurar una fuente personalizada en cada control de la aplicación? ¿Y no necesariamente en tiempo de ejecución? (es decir, desde xml si es posible o solo una vez para toda la aplicación en el archivo JAVA)
Puedo configurar la fuente para un control de este código.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
Y el problema con este código es que debería llamarse para cada control. Y quiero llamar a este o cualquier método similar una vez, o si es posible, establecer la propiedad en xml. ¿Es posible?
android
fonts
textview
android-fonts
Prasham
fuente
fuente
VIEW
lugar de escribir unacustom text view
y una porcustom button view
separado? Mi requisito es para todos los controles, y la vista de texto fue solo un ejemplo. Lo siento, olvidé mencionarlo ... :-(Respuestas:
EDITAR : Ha pasado un tiempo y me gustaría agregar lo que creo que es la mejor manera de hacer esto, ¡y a través de XML nada menos!
Entonces, primero, querrá crear una nueva clase que anule cualquier Vista que desee personalizar. (por ejemplo, ¿quieres un botón con un tipo de letra personalizado? Ampliar
Button
). Hagamos un ejemplo:Ahora, si no tiene uno, agregue un documento XML debajo
res/values/attrs.xml
y agregue:Bien, con eso fuera del camino, volvamos al
parseAttributes()
método de antes:Ahora estás listo. Puede agregar más atributos para casi cualquier cosa (podría agregar otro para typefaceStyle: negrita, cursiva, etc.) pero ahora veamos cómo usarlo:
La
xmlns:custom
línea realmente puede ser cualquier cosa, pero la convención es lo que se muestra arriba. Lo que importa es que es único y por eso se usa el nombre del paquete. Ahora solo usa elcustom:
prefijo para tus atributos y elandroid:
prefijo para los atributos de Android.Una última cosa: si quiere utilizar esto en un estilo (
res/values/styles.xml
), debe no agregar laxmlns:custom
línea. Simplemente haga referencia al nombre del atributo sin prefijo:Usar un tipo de letra personalizado en Android
Esto debería ayudar. Básicamente, no hay forma de hacer esto en XML, y hasta donde yo sé, no hay una forma más fácil de hacerlo en código. Siempre puede tener un método setLayoutFont () que cree el tipo de letra una vez y luego ejecute setTypeface () para cada uno. Solo tendría que actualizarlo cada vez que agregue un nuevo elemento a un diseño. Algo como a continuación:
EDITAR : Así que empecé a implementar algo como esto yo mismo, y cómo terminé haciéndolo fue haciendo una función como esta:
Luego, simplemente use este método de onCreate () y pase todos los TextViews que desea actualizar:
EDITAR 5/09/12:
Entonces, dado que esto todavía está obteniendo vistas y votos, me gustaría agregar un método mucho mejor y más completo:
Si le pasa la raíz de su diseño, buscará de forma recursiva
TextView
oButton
vistas (o cualquier otra que agregue a esa declaración if) dentro de ese diseño, y establecerá la fuente sin que tenga que especificarlas por ID. Por supuesto, esto supone que desea configurar la fuente para cada vista.fuente
recycle
elTypedArray values
?xmlns:custom="http://schemas.android.com/apk/res-auto"
Hay una forma bastante sencilla de hacerlo mediante XML. Solo necesita crear su propio widget que amplíe TextView.
Primero, cree un archivo en res / values / attrs.xml con el siguiente contenido:
Después de eso, crea tu widget personalizado:
Como puede ver, el código anterior leerá una fuente dentro de la carpeta assets /. Para este ejemplo, supongo que hay un archivo llamado "custom.ttf" en la carpeta de activos. Por último, use el widget en los XML:
Nota: no podrá ver su fuente personalizada en el editor de diseño de Eclipse. Por eso pongo el
isInEditMode()
cheque. Pero si ejecuta su aplicación, la fuente personalizada funcionará a la perfección.¡Espero eso ayude!
fuente
TextView
clase; configuró eltypeface
en él y usé el control personalizado en el diseño como lo hacemos normalmente y funcionó para mí ... Sin embargo, fue simple que el anterior ...Ejemplo de TextView con tipo de letra roboto:
attr.xml
RobotoTextView.java:
Ejemplo de uso:
Recursos: fuentes Roboto y Noto
fuente
Es demasiado tarde, pero ayuda al otro,
he creado CustomTextView que tiene un atributo llamado typeFace y se ocupa del problema de pérdida de memoria con la carga de tipografía sin almacenamiento en caché
En primer lugar, la
Fonts
clase que carga las fuentes de los activos solo una vezentonces necesita agregar un atributo personalizado en el attrs.xml agregar esto
luego clase personalizada
y finalmente agregue la vista de texto
y puede cambiar la fuente de manera programada con el método setTypeFace y
también puede mover el espacio de nombres personalizado a su diseño principal si desea usar más de uno desde esta vista
Codificación feliz :)
fuente
El método siguiente, llamado en onCreate () y pasado su ViewGroup más externo, funcionará para todo menos el texto que se crea dinámicamente (es decir, listas dinámicas, alertas, etc.). Una forma fácil de obtener el ViewGroup más externo es usar getRootView en cualquiera de sus vistas.
Esto también debería funcionar para contenido dinámico, solo tendría que llamarlo, pasando lo que haya creado, justo después de haberlo creado (aunque no lo he probado).
Para ahorrar memoria, probablemente querrá hacer que el tipo de letra sea una variable estática, en lugar de crear una nueva cada vez que el bucle se ejecute como lo hice aquí.
fuente
Si está buscando una solución programática más general, creé una clase estática que se puede usar para configurar el tipo de letra de una vista completa (UI de actividad). Tenga en cuenta que estoy trabajando con Mono (C #) pero puede implementarlo fácilmente usando Java.
Puede pasar a esta clase un diseño o una vista específica que desee personalizar. Si quieres ser súper eficiente, puedes implementarlo usando el patrón Singleton.
En su actividad, deberá crear un objeto Tipo de letra. Creo el mío en OnCreate () usando un archivo .ttf ubicado en mi directorio Resources / Assets /. Asegúrese de que el archivo esté marcado como Activo de Android en sus propiedades.
fuente
Desafortunadamente, Android no proporciona la forma rápida, fácil y limpia que está buscando para cambiar la fuente para toda su aplicación. Pero recientemente analicé este asunto y creé algunas herramientas que le permiten cambiar la fuente sin ningún tipo de codificación (puede hacerlo todo a través de xml, estilos e incluso apariencias de texto). Se basan en soluciones similares a las que ve en las otras respuestas aquí, pero permiten mucha más flexibilidad. Puedes leerlo todo en este blog y ver el proyecto github aquí .
A continuación, se muestra un ejemplo de cómo aplicar estas herramientas. Pon todos tus archivos de fuentes en formato
assets/fonts/
. Luego, declare esas fuentes en un archivo xml (por ejemplores/xml/fonts.xml
) y cargue este archivo al principio de su aplicación conTypefaceManager.initialize(this, R.xml.fonts);
(por ejemplo, en el onCreate de su clase de aplicación). El archivo xml se ve así:Ahora puede usar estas fuentes en su estilo o xml (siempre que use las herramientas que mencioné anteriormente), usando el elemento de interfaz de usuario personalizado
com.innovattic.font.FontTextView
en su diseño xml. A continuación, puede ver cómo puede aplicar una fuente a todos los textos en toda su aplicación, simplemente editandores/values/styles.xml
:Con el acompañante
res/layout/layout.xml
:No olvide aplicar el tema en su manifiesto de Android.
fuente
Me gustaría agregar una nota a la gran solución de
leocadiotine
. Es perfecto, pero cuando se utiliza este TextView personalizado muchas veces ralentiza la aplicación, ya que tiene que acceder a los activos cada vez que se crea una vista de texto. Sugiero usar algo comoView Holder pattern
en elAdapters
, escribí un ejemplo:De esta manera, la aplicación accede a los activos solo una vez por activo y los mantiene en la memoria para futuras necesidades.
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
He encontrado información paso a paso en este enlace, enlace: https://github.com/jaydipumaretiya/CustomTypeface/
Hay muchas formas de usar el tipo de letra correctamente en Android, debe colocar su archivo de tipo de letra en la carpeta de activos debajo de su principal directamente y puede usarlo en tiempo de ejecución.
Otra forma más sencilla es usar la biblioteca predeterminada para configurar el tipo de letra en su archivo xml. Prefiero esta biblioteca de tipos de letra personalizada para configurar el tipo de letra en TextView, EditText, Button, CheckBox, RadioButton y AutoCompleteTextView y otras cuñas en Android.
fuente
Android 8.0 (API nivel 26) introduce una nueva función, Fuentes en XML. Puede crear un archivo fontfamily y configurarlo en styles.xml.
Fuente: Fuentes en XML
fuente