2011-04-12 20 views

Respuesta

145

Debe crear la carpeta de fuentes en la carpeta de activos en su proyecto y poner su TTF en ella. Luego, en su Actividad onCreate()

TextView myTextView=(TextView)findViewById(R.id.textBox); 
Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/mytruetypefont.ttf"); 
myTextView.setTypeface(typeFace); 

Tenga en cuenta que no todo el TTF funcionará. Mientras estaba experimentando, funcionó solo para un subconjunto (en Windows, aquellos cuyo nombre está escrito en letras mayúsculas).

+0

gracias zelimir lo tengo. – bHaRaTh

+0

De nada. – Zelimir

+6

¿dónde está esta carpeta de activos? Estoy usando android studio y puedo encontrarlo en src/ – intoTHEwild

9

Crea una carpeta llamada fuentes en la carpeta de activos y agrega el fragmento del enlace a continuación.

Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf"); 
textview.setTypeface(tf); 
+0

Gracias Janardhan gracias, lo tengo. – bHaRaTh

5

La manera más fácil de lograr esto es empaquetar las fuentes deseadas con su aplicación. Para hacer esto, simplemente cree una carpeta assets/en la raíz del proyecto, y ponga sus fuentes (en formato TrueType, o TTF) en los activos. Puede, por ejemplo, crear activos/fuentes/y poner sus archivos TTF allí.

Luego, necesita decirle a sus widgets que usen esa fuente. Desafortunadamente, ya no puede usar XML de diseño para esto, ya que el XML no conoce acerca de las fuentes que puede haber guardado como un activo de la aplicación. En su lugar, debe realizar el cambio en el código Java, llamando al Typeface.createFromAsset (getAssets(), "fonts/HandmadeTypewriter.ttf"), y luego tomando el objeto Typeface creado y pasándolo a su TextView a través de setTypeface ()

Para mayor referencia aquí es el tutorial donde obtuve esto:

http://www.androidguys.com/2008/08/18/fun-with-fonts/

7

Para poner en práctica lo que necesita utilizar tipografía seguir adelante con la muestra a continuación

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Roboto/Roboto-Regular.ttf"); 
for (View view : allViews) 
{ 
    if (view instanceof TextView) 
    { 
     TextView textView = (TextView) view; 
     textView.setTypeface(typeface); 
     } 
    } 
} 
+1

para 'allViews', tiene que recorrer el diseño usando' getChildCount() ' , por lo que podría reemplazar el foreach por un simple bucle for. – ConquerorsHaki

11

Puede utilizar la costumbre TextView para toda la aplicación con fuente personalizada aquí es un ejemplo para eso

public class MyTextView extends TextView { 

    Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR); 
    Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD); 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public MyTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyTextView(Context context) { 
     super(context); 
    } 

    public void setTypeface(Typeface tf, int style) { 
     if (style == Typeface.BOLD) { 
      super.setTypeface(boldTypeface/*, -1*/); 
     } else { 
      super.setTypeface(normalTypeface/*, -1*/); 
     } 
    } 
} 
2

Recomiendo este approach es muy agradable con agregar el nombre de la fuente personalizada en typeface a styles.xml y poner su conjunto de fuentes en la carpeta assets.

+0

Muy buen enfoque, sugiero llamarlo la atención. Y tal vez sea una buena idea copiar el código principal y publicarlo aquí, si no se podrá acceder al enlace en el futuro. – validcat

1

Un punto más además de las respuestas anteriores. Cuando se utiliza una fuente dentro de un fragmento, la instanciación tipo de letra se debe hacer en el método onAttach (override) como se indica a continuación:

@Override 
public void onAttach(Activity activity){ 
    super.onAttach(activity); 
    Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf"); 
} 

Motivo:
hay un corto espacio de tiempo antes de que un fragmento es adjunto a una actividad. Si se llama al método CreateFromAsset antes de adjuntar un fragmento a una actividad, se produce un error.

Cuestiones relacionadas