Agregar una fuente personalizada para la aplicación completa de Android

En mi aplicación necesito usar la fuente helvetica para todos los campos de textviews y de edición-texto. ¿Hay alguna manera de hacer esto aparte de usar el método settypeface para cada textview? Cualquier sugerencia sería de gran ayuda.

Gracias por adelantado !

8 Solutions collect form web for “Agregar una fuente personalizada para la aplicación completa de Android”

Lo averigüé por mí mismo. Este es el código que usé. Creo TextView personalizado que tiene fuente personalizada como fuente predeterminada.

 public class MyTextView extends TextView { public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyTextView(Context context) { super(context); init(); } public void init() { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf"); setTypeface(tf ,1); } } 

En sus actividades, justo después de llamar

SetContentView (R.id.blahblah);

Debe ejecutar un método para recorrer toda la jerarquía de widgets y tratar con la sustitución de fuentes, como;

 setContentView(R.id.blahblah); Utils.overrideFonts(this, findViewById(android.R.id.content)); 

Y el mencionado "overrideFonts" método debe ser algo así como;

 public static void overrideFonts(final Context context, final View v) { try { if (v instanceof ViewGroup) { ViewGroup vg = (ViewGroup) v; for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); overrideFonts(context, child); } } else if (v instanceof TextView) { ((TextView)v).setTypeface(FONT_REGULAR); } } catch (Exception e) { e.printStackTrace(); // ignore } } 

En este esquema, FONT_REGULAR debe ser inicializado en algún lugar seguro, puede imaginar un singleton o alguna otra forma de asegurarse de que se inicializa correctamente …

 private static void initializeFonts(final Context context) { FONT_REGULAR = Typeface.createFromAsset(context.getAssets(), "fonts/myfont_medium.otf"); FONT_BOLD = Typeface.createFromAsset(context.getAssets(), "fonts/myfont_bold.otf"); } 

Si utiliza una subclase de Activity como MyAppActivity (extends Activity), entonces no necesita cambiar cada clase de Activity para tales personalizaciones. En su lugar puede cortar en él y anular el comportamiento como tal;

 public class MyAppActivity extends Activity { ... ... @Override public void setContentView(final int layoutResID) { super.setContentView(layoutResID); Utils.overrideFonts(this, findViewById(android.R.id.content)); } ... ... } 

De esta manera usted puede usar cualquier actividad suya para tener un comportamiento común;

 public class SettingsUI extends MyAppActivity { ... ... } 

Espero que ayude … ¡Salud!

Crear un estilo y utilizarlo todos los atributos de texto.

 <style name="CustomText"> <item name="android:typeface">YourFontName</item> </style> 

Utilícelo:

 <TextView style="@style/CustomText" /> 

Arriba es utilizar fuentes personalizadas en toda la actividad para la personalización que puede utilizar ….

 Typeface font = Typeface.createFromAsset(getAssets(), "CustomFontName.ttf"); txt.setTypeface(font); 

Prueba esto.

Para aplicar una fuente personalizada a toda la aplicación, simplemente cree la siguiente actividad:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FontManager.getInstance().initialize(this, R.xml.fonts); setContentView(R.layout.main); } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { SimpleFactory factory = new SimpleFactory(); return factory.onCreateView(name, context, attrs); } 

Donde FontManager es la clase que gestiona todas las fuentes que se definen en /xml/fonts.xml y SimpleFactory sólo la fábrica que crear vistas y aplicar una fuente personalizada a cada vista que instancia de vista de texto.

/xml/fonts.xml

 <?xml version="1.0" encoding="utf-8"?> <familyset> <family> <nameset> <!--Font name--> <name>HelveticaNeueLTStd</name> </nameset> <fileset> <!--Font styles--> <file style="normal">fonts/HelveticaNeueLTStd-LtCn.otf</file> <file style="bold">fonts/HelveticaNeueLTStd-MdCn.otf</file> <file style="italic">fonts/HelveticaNeueLTStd-LtCnO.otf</file> <file style="bold_italic">fonts/HelveticaNeueLTStd-MdCnO.otf</file> </fileset> </family> <family> <!--There new font family can be added, don't forget add font files into /assets/fonts directory and put the name of the font into /values/string/font.xml--> </family> </familyset> 

FontFactory – abastract class, sólo lo extiende para crear su propia fábrica

 public abstract class FontFactory implements LayoutInflater.Factory{ public final String TAG = getClass().getSimpleName(); static final Class<?>[] mConstructorSignature = new Class[] {Context.class, AttributeSet.class}; final Object[] mConstructorArgs = new Object[2]; private static final String[] sClassPrefixList = { "android.widget.", "android.webkit." }; @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if("ViewStub".equals(name) || "View".equals(name)){ return null; } View view = null; Constructor<? extends View> constructor = null; Class clazz = null; if (view == null) { if (-1 == name.indexOf('.')) { for (String prefix : sClassPrefixList) { clazz = getClazz(prefix, name); if(clazz != null){ break; } } } else { clazz = getClazz("", name); } } if (clazz == null) { Log.d(TAG, "View can't be created " + name); return null; } try { constructor = clazz.getConstructor(mConstructorSignature); } catch (NoSuchMethodException e) { e.printStackTrace(); } Object[] args = mConstructorArgs; args[1] = attrs; if(constructor == null){ return null; } try { view = constructor.newInstance(context, attrs); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } if(view != null){ onFontApply(context, view); } return view; } public abstract void onFontApply(Context context, View view); private Class getClazz(String prefix, String name){ Class clazz = null; try { clazz = Class.forName(prefix + name); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { return clazz; } } } 

FontManager – sólo los archivos de fuentes de mapa definidos en /xml/fonts.xml a los archivos de fuente colocados en el directorio / assets y devuelven TypeFace por el nombre de la fuente y el estilo de fuente.

 public void initialize(Context context, int resId) { if(mFonts != null){ Log.d(TAG,"FontManager have already initialized"); return; } XmlResourceParser parser = null; try { parser = context.getResources().getXml(resId); mFonts = new ArrayList<Font>(); String tag; String fontStryleAttr = null; int eventType = parser.getEventType(); Font font = null; do { tag = parser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if (tag.equals(TAG_FAMILY)) { // one of the font-families. font = new Font(); } else if (tag.equals(TAG_NAMESET)) { // a list of font-family names supported. font.families = new ArrayList<String>(); } else if (tag.equals(TAG_NAME)) { isName = true; } else if (tag.equals(TAG_FILESET)) { // a list of files specifying the different styles. font.styles = new ArrayList<FontStyle>(); } else if (tag.equals(TAG_FILE)) { isFile = true; fontStryleAttr = parser.getAttributeValue(null, ATTR_STYLE); } break; case XmlPullParser.END_TAG: if (tag.equals(TAG_FAMILY)) { // add it to the list. if (font != null) { mFonts.add(font); font = null; } } else if (tag.equals(TAG_NAME)) { isName = false; } else if (tag.equals(TAG_FILE)) { isFile = false; fontStryleAttr = null; } break; case XmlPullParser.TEXT: String text = parser.getText(); if (isName) { // value is a name, add it to list of family-names. if (font.families != null) font.families.add(text); } else if (isFile) { // value is a file, add it to the proper kind. FontStyle fontStyle = new FontStyle(); fontStyle.font = Typeface.createFromAsset(context.getAssets(), text); String attr = parser.getAttributeValue(null, ATTR_STYLE); if (fontStryleAttr.equals(STYLE_BOLD)) fontStyle.style = Typeface.BOLD; else if (fontStryleAttr.equals(STYLE_ITALIC)) fontStyle.style = Typeface.ITALIC; else if (fontStryleAttr.equals(STYLE_BOLD_ITALIC)) fontStyle.style = Typeface.BOLD_ITALIC; else fontStyle.style = Typeface.NORMAL; font.styles.add(fontStyle); } } eventType = parser.next(); } while (eventType != XmlPullParser.END_DOCUMENT); } catch (XmlPullParserException e) { throw new InflateException("Error inflating font XML", e); } catch (IOException e) { throw new InflateException("Error inflating font XML", e); } finally { if (parser != null) parser.close(); } } public Typeface get(String family, int style) { for (Font font: mFonts) { for (String familyName : font.families) { if (familyName.equals(family)) { // if no style in specified, return normal style. if (style == -1) style = Typeface.NORMAL; for (FontStyle fontStyle : font.styles) { if (fontStyle.style == style) return fontStyle.font; } } } } return mDefaultFont; } 

Para más código y las muestras apenas miran aquí

Ok, puedes hacerlo, pero lo que esencialmente quieres hacer es un atlas de fuente en un formato de mapa (que tendrá que ejecutar en unicode orden que se inicia! "# $% '() X +, -. /) Lo que la función Lo que haremos es tomar una cuerda y calcular dónde está en el atlas cada letra correspondiente.

No es demasiado fácil, pero cada personaje debe tener la misma longitud y el ancho, usted podría tener diferentes longitudes, pero que será mucho más difícil.

Puede utilizar PixlUI en http://bit.ly/1bzjWQn

Importar su .jar en su proyecto. Utilícelo en XML

  <com.neopixl.pixlui.components.textview.TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" pixlui:typeface="MyFont.ttf" /> 

No olvide el esquema del implemento (xmlns: pixlui = "http://schemas.android.com/apk/com.neopixl.pixlui&quot😉

  setContentView(R.layout.activity_main); custfont(this, findViewById(android.R.id.content)); private void custfont(final Context context, View v) { try { if (v instanceof ViewGroup) { ViewGroup vg = (ViewGroup) v; for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); overrideFonts(context, child); } } else if (v instanceof TextView ) { ((TextView) v).setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/ostrichblack.ttf")); } } catch (Exception e) { } } 
 import android.content.Context; import android.graphics.Typeface; /** * Created by Sanjeev Kumar on 4/18/2017. */ public class FontManager { public Context mContext; public FontManager(Context context) { this.mContext = context; } public Typeface getSquarkiFont() { return Typeface.createFromAsset(mContext.getAssets(), "fonts/Squarki.ttf"); } public Typeface getLazySpringDayFont() { return Typeface.createFromAsset(mContext.getAssets(), "fonts/LazySpringDay.ttf"); } } 
  • TextView en TableRow está parcialmente oculto
  • Para dibujar un subrayado debajo de TextView en Android
  • android: límite de 10 caracteres por línea TextView
  • Android - Centro de vista de texto en LinearLayout
  • Disposición de Android: Envuelva dos vistas de texto
  • Android Linkify enlaces textColor ignorado, estilo CSS anula posible?
  • Ellipse de líneas individuales de SpannableString en un TextView
  • Padding arround textview con fondo de nueve parches no tienen efecto visual
  • EditText Alternativas en un Widget? Tiene que haber una forma
  • TextView en el centro de la pantalla
  • Deslizar para desbloquear animación en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.