Adición de una fuente personalizada al tema en Android

¿Hay alguna manera de agregar fuentes personalizadas en Temas en Android?

He leído Sugerencia Rápida: Personalizar las Fuentes de Android , pero aquí tenemos que programar de forma programada la fuente personalizada al texto.

TextView txt = (TextView) findViewById(R.id.custom_font); Typeface font = Typeface.createFromAsset(getAssets(), "Chantelli_Antiqua.ttf"); txt.setTypeface(font); 

Pero quiero establecer la fuente personalizada por estilo / tema.

6 Solutions collect form web for “Adición de una fuente personalizada al tema en Android”

Lamentablemente, Android no proporciona la forma rápida, fácil y limpia que está buscando para cambiar la fuente de toda la aplicación. Pero recientemente he estudiado este asunto y creado algunas herramientas que le permiten cambiar la fuente sin ninguna codificación (se puede hacer todo a través de xml, estilos e incluso apariciones de texto). Están basados ​​en soluciones similares como se ve en las otras respuestas aquí, pero permiten una mayor flexibilidad. Puedes leer todo sobre este blog , y ver el proyecto github aquí .

He aquí un ejemplo de cómo aplicar estas herramientas. Coloque todos sus archivos de fuentes en assets/fonts/ . A continuación, declare esas fuentes en un archivo xml (p. Ej. res/xml/fonts.xml ) y cargue este archivo con anticipación en su aplicación con TypefaceManager.initialize(this, R.xml.fonts); (Por ejemplo, en la clase onCreate de su aplicación). El archivo xml se ve así:

 <?xml version="1.0" encoding="utf-8"?> <familyset> <!-- Some Font. Can be referenced with 'someFont' or 'aspergit' --> <family> <nameset> <name>aspergit</name> <name>someFont</name> </nameset> <fileset> <file>Aspergit.ttf</file> <file>Aspergit Bold.ttf</file> <file>Aspergit Italic.ttf</file> <file>Aspergit Bold Italic.ttf</file> </fileset> </family> <!-- Another Font. Can be referenced with 'anotherFont' or 'bodoni' --> <family> <nameset> <name>bodoni</name> <name>anotherFont</name> </nameset> <fileset> <file>BodoniFLF-Roman.ttf</file> <file>BodoniFLF-Bold.ttf</file> </fileset> </family> </familyset> 

Ahora puede usar estas fuentes en su estilo o xml (siempre y cuando use las herramientas que he mencionado anteriormente), estableciendo el atributo flFont en el textView 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 de la aplicación completa, simplemente editando res/values/styles.xml :

 <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- Application theme --> <!-- Use a different parent if you don't want Holo Light --> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:textViewStyle">@style/MyTextViewStyle</item> </style> <!-- Style to use for ALL text views (including FontTextView) --> <!-- Use a different parent if you don't want Holo Light --> <style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView"> <item name="android:textAppearance">@style/MyTextAppearance</item> </style> <!-- Text appearance to use for ALL text views (including FontTextView) --> <!-- Use a different parent if you don't want Holo Light --> <style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo"> <!-- Alternatively, reference this font with the name "aspergit" --> <!-- Note that only our own TextView's will use the font attribute --> <item name="flFont">someFont</item> <item name="android:textStyle">bold|italic</item> </style> <!-- Alternative style, maybe for some other widget --> <style name="StylishFont"> <item name="flFont">anotherFont</item> <item name="android:textStyle">normal</item> </style> </resources> 

Con el acompañamiento res/layout/layout.xml :

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <!-- This text view is styled with the app theme --> <com.innovattic.font.FontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This uses my font in bold italic style" /> <!-- This text view is styled here and overrides the app theme --> <com.innovattic.font.FontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:flFont="anotherFont" android:textStyle="normal" android:text="This uses another font in normal style" /> <!-- This text view is styled with a style and overrides the app theme --> <com.innovattic.font.FontTextView style="@style/StylishFont" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This also uses another font in normal style" /> </LinearLayout> 

No te olvides de aplicar el tema en tu manifiesto de Android.

Creo que esto es duplicado de esta pregunta y esta .

En mis actividades en tiempo de ejecución, uso algo como esto:

 FontUtils.setCustomFont(findViewById(R.id.top_view), getAssets()); 

En XML:

  <TextView android:id="@+id/my_label" android:tag="condensed" android:text="@string/label" ... /> 

Tan teóricamente usted puede crear el estilo y utilizarlo junto con FontUtils / código de tiempo de ejecución.

 <style name="roboto_condensed"> <item name="android:tag">condensed,your-own-css-like-language-here</item> </style> 

Clase FontUtils:

 public class FontUtils { private static Typeface normal; private static Typeface bold; private static Typeface condensed; private static Typeface light; private static void processsViewGroup(ViewGroup v, final int len) { for (int i = 0; i < len; i++) { final View c = v.getChildAt(i); if (c instanceof TextView) { setCustomFont((TextView) c); } else if (c instanceof ViewGroup) { setCustomFont((ViewGroup) c); } } } private static void setCustomFont(TextView c) { Object tag = c.getTag(); if (tag instanceof String) { if (((String) tag).contains("bold")) { c.setTypeface(bold); return; } if (((String) tag).contains("condensed")) { c.setTypeface(condensed); return; } if (((String) tag).contains("light")) { c.setTypeface(light); return; } } c.setTypeface(normal); } public static void setCustomFont(View topView, AssetManager assetsManager) { if (normal == null || bold == null || condensed == null || light == null) { normal = Typeface.createFromAsset(assetsManager, "fonts/roboto/Roboto-Regular.ttf"); bold = Typeface.createFromAsset(assetsManager, "fonts/roboto/Roboto-Bold.ttf"); condensed = Typeface.createFromAsset(assetsManager, "fonts/roboto/Roboto-Condensed.ttf"); light = Typeface.createFromAsset(assetsManager, "fonts/roboto/Roboto-Light.ttf"); } if (topView instanceof ViewGroup) { setCustomFont((ViewGroup) topView); } else if (topView instanceof TextView) { setCustomFont((TextView) topView); } } private static void setCustomFont(ViewGroup v) { final int len = v.getChildCount(); processsViewGroup(v, len); } } 

Mediante el uso de mi CustomTextView usted especifica un nombre de archivo de fuente en su carpeta de assets directamente en su archivo de diseño XML.

Mi respuesta esta aqui

Puede incluir el tipo de fuente personalizado en la carpeta de activos y recuperarlo desde allí.

Declare los Typefaces como:

 Typeface helveticaBold; Typeface helveticaRegular; 

En onCreate () escribe el siguiente código:

 helveticaBold = Typeface.createFromAsset(getAssets(), "helvetica_bold.ttf"); helveticaRegular = Typeface.createFromAsset(getAssets(), "helvetica_regular.ttf"); 

Por último, establezca la tipografía del texto de TextView o EditText como:

 editText.setTypeface(helveticaRegular); 

Eso es…

Creo que la respuesta a su pregunta woulbe ser personalizado TextView con un parámetro XML adicional, que puede incluir en sus temas.

Puede analizar este valor en el constructor TextView (Contexto contextual, AttributeSet attrs) para inicializarlo. Compruebe este enlace, por ejemplo, para definir attrs personalizados para sus vistas e inicializarlas.

Espero que esto es lo que querías decir, pero si no lo es, debe ser una buena referencia para los demás de todos modos.

** Nota: Las fuentes se pueden encontrar Ordenador / Disco local (C:) / Windows / Fuentes **

Copie la fuente que desee utilizar en la carpeta Fuentes arriba y péguela en una carpeta recién creada en la carpeta de activos de Eclipse.

  private void initTypeFace() { TypeFace tf = TypeFace.createFromAsset(getAsset(), "Chantelli Antiqua.ttf"); TextView txt = (TextView) findViewById(R.id.custom_font); txt.setTypeface(tf); example_button1.setTypeface(tf); example_button2.setTypeface(tf); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.