2012-01-27 18 views
24

¿Cómo puedo usar una fuente personalizada que se agregó en la carpeta de elementos en mi xml? Sé que podemos usar el método setTypeface() en Java, pero tenemos que hacer esto en todas partes donde usemos ese TextView. Entonces, ¿hay una mejor manera?¿Cómo usar una fuente personalizada en Android xml?

+0

He actualizado mi respuesta. Por favor, elimine -ve de esa respuesta. –

+0

Pruebe este tutorial [http://www.barebonescoder.com/2010/05/android-development-using-custom-fonts/](http://www.barebonescoder.com/2010/05/android-development-using -custom-fonts /) Creo que le ayuda – Ajay

+0

Hola, por favor, consulte esta publicación . un problema con la misma naturaleza fue discutido y respondido allí. – Wajeeh

Respuesta

58

La mejor manera que encontré al googlear es: si quieres usar TextView, tenemos que extender la vista de texto y tener que establecer la fuente para que luego podamos usar nuestra vista de texto personalizada en nuestro xml. Mostraré el TextView extendido a continuación

package com.vins.test; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.AttributeSet; 
import android.widget.TextView; 

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(); 
    } 

    private void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
               "your_font.ttf"); 
     setTypeface(tf); 
    } 

} 

Llamamos a init() para establecer la fuente en cada uno de los constructores. Más tarde tenemos que usar esto en nuestro main.xml como se muestra a continuación.

<com.vins.test.MyTextView 
    android:id="@+id/txt" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_weight="1" 
    android:text="This is a text view with the font u had set in MyTextView class " 
    android:textSize="30dip" 
    android:textColor="#ff0000" 
    > 

Actualización:

ser consciente de la pérdida de memoria en pre-4.0 de Android como se ha mencionado por pandre.

+0

@vins: ¿y si el usuario también dice 'android: textStyle =" bold "'? ¿Se establecerá el texto en negrita? –

+0

@kilaka Sí, debería ponerse en negrita. – Vins

+1

@vins - gracias. ¿Esto significa que el archivo ttf incluye todos los subtipos de la fuente - negrita, cursiva, etc. y combinaciones de ellos? –

2

Deja tus archivos fuente en asset\fonts\fontname

definir tres TextView en el archivo XML a continuación, poner este código en su clase de actividad:

public class AndroidExternalFontsActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Font path 
     String fontPath = "fonts/DS-DIGIT.TTF"; 
     String fontPath1 = "fonts/Face Your Fears.ttf"; 
     String fontPath2 = "fonts/HelveticaNeue-Bold_0.otf"; 

     // text view label 
     TextView txtGhost = (TextView) findViewById(R.id.ghost); 
     TextView txtGhost1 = (TextView) findViewById(R.id.ghost1); 
     TextView txtGhost2 = (TextView) findViewById(R.id.ghost2); 

     // Loading Font Face 
     Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 
     Typeface tf1 = Typeface.createFromAsset(getAssets(), fontPath1); 
     Typeface tf2 = Typeface.createFromAsset(getAssets(), fontPath2); 

     // Applying font 
     txtGhost.setTypeface(tf); 
     txtGhost1.setTypeface(tf1); 
     txtGhost2.setTypeface(tf2); 
    } 
} 
+13

Oye, esta es una manera normal de configurar la fuente, la pregunta era para usar una fuente personalizada por defecto en XML. – Vins

Cuestiones relacionadas