2012-09-05 3 views
25

Possible en double:
Is it possible to set font for entire Application?Android - Comment définir une police personnalisée pour l'application entière

je dois définir une police personnalisée (.ttf le format) pour l'application entière, comment je le fais? de Manifest ou XML serait la meilleure option s'il est possible

+0

Juste parce qu'il est marqué en double, on ne peut pas fournir une meilleure réponse: Utilisez la bibliothèque de calligraphie pour y parvenir. Il change même la police des toasts. – suku

+0

Vérifiez ce tut http://www.gadgetsaint.com/android/custom-fonts-textview-edittext-android/#.WNive2996Hs – ASP

+0

ne vous utilisez pas juste https://github.com/chrisjenx/Calligraphy – Fattie

Répondre

22

EDIT septembre 2014:

Pour toute personne voyant encore cette vieille horrible réponse, la vraie, la bonne réponse est ici:

https://stackoverflow.com/a/16883281/1154026


VIEUX:

Votre meilleur pari serait:

Customize Android Fonts

Alors

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

Avec votre .ttf dans la racine du dossier "assets".

+0

Cela fonctionne super, mais si j'ai un ListView, comment puis-je changer la police de la rangée? Je suppose qu'il est possible de faire à travers XML –

+0

Cette solution ne semble plus fonctionner sur Android 5.0 Toute autre option? –

+0

@AndreaMarioLufino Définir ce type de caractères dans votre adaptateur pour tous les textViews que vous avez fonctionné. Disons que vous avez 'textview1, textview2' et' textView3' que vous devriez simplement utiliser setTypface (yourfont) sur eux. J'espère que cela aide. – Recomer

7
TextView tv=(TextView)findViewById(R.id.custom); 
    Typeface face=Typeface.createFromAsset(getAssets(), 
              "fonts/Verdana.ttf"); 

    tv.setTypeface(face); 

mettre le fichier de police dans le dossier des polices dans/res/

Comme ma réponse si elle est utile ...

9

cérat une sous-classe TextView et l'utiliser partout

public class RobotoTextView extends TextView { 

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

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

    public RobotoTextView(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     if (!isInEditMode()) { 
      Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf"); 
      setTypeface(tf); 
     } 
    } 

} 

utilisation

<com.test.RobotoTextView 
     android:id="@+id/name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     /> 

dans le code java que vous pouvez lancer à textview

0

Vous pouvez étendre la TextView comme suggéré here et définir votre police sur cela alors l'utiliser dans toute l'application.

11

Vous pourriez le faire comme ceci. Créer un textview personnalisé et l'utiliser partout un

public class MyTextView extends android.widget.TextView 
{ 

    public MyTextView(Context context) 
    { 
     this(context, null); 
    } 

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

    public MyTextView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs); 
     if (this.isInEditMode()) return ; 

     final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle); 
     final String customFont = a.getString(R.styleable.SomeStyle_font); 

     //Build a custom typeface-cache here! 
     this.setTypeface(
      Typeface.createFromAsset(context.getAssets(), customFont) 
     ); 
    } 
} 

Ajouter à ce attrs.xml

<declare-styleable name="SomeStyle"> 
    <attr name="font" format="string" /> 
</declare-styleable> 

Ensuite, dans votre thème, faites ceci: Cela fera en sorte tous les textviews utiliseront le style MyTextView

<item name="android:textViewStyle">@style/MyTextView</item> 

Et maintenant, nous pouvons définir votre police personnalisée en utilisant votre attribut personnalisé dans ce style.

<style name="MyTextView" parent="@android:style/Widget.TextView"> 
    <item name="font">MyPathToFontInAssets.ttf</item> 
</style> 

Ainsi, lorsque vous utilisez MyTextView dans le projet, il aura votre police personnalisée. IMPORTANT: IMPORTANT: Les polices de caractères ne sont pas mises en mémoire cache. Par conséquent, si vous envisagez d'utiliser ce code, vous devez également créer un cache de polices personnalisé afin que vous puissiez réutiliser la police de caractères personnalisée pour toutes les textviews. Cela accélérera considérablement l'application!

MISE À JOUR: Comme Amir a dit, ce qui est presque le même que Custom fonts and XML layouts (Android) mais je l'utilise aussi le style android utiliser automatiquement sur tous textviews dans l'application.

+0

Salut! Son erreur d'affichage dans cette ligne ' @ style/MyTextView' ** Un 'type' attribut est requis pour ** Que dois-je faire maintenant? – DroidLearner

+0

J'ai effacé les erreurs en ajoutant 'type =" string "' – DroidLearner

+0

_Les types de caractères ne sont pas mis en cache, donc si vous prévoyez d'utiliser ce code, vous devriez aussi créer un cache-type personnalisé_ comment créer un cache? – DroidLearner

Questions connexes