Duplicata possible:
Est-il possible de définir la police pour toute l'application?
J'ai besoin de définir une police personnalisée (format .ttf) pour toute l'application, comment puis-je le faire? De Manifest ou XML serait la meilleure option si cela est possible
EDIT Sept 2014:
Pour tous ceux qui voient encore cette vieille réponse terrible, la vraie, bonne réponse est ici:
https://stackoverflow.com/a/16883281/1154026
ANCIEN:
Votre meilleur pari serait le suivant:
Alors
TextView text = (TextView) findViewById(R.id.custom_font);
Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
text.setTypeface(font);
Avec votre .ttf à la racine du dossier "assets".
Vous pourriez le faire comme ça. Créez une vue de texte personnalisée et utilisez-la partout
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)
);
}
}
Ajoutez ceci à attrs.xml
<declare-styleable name="SomeStyle">
<attr name="font" format="string" />
</declare-styleable>
Ensuite, dans votre thème, procédez comme suit: cela garantira que toutes les vues de texte 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, chaque fois que vous utilisez MyTextView dans le projet, il aura votre police personnalisée.
IMPORTANT: Les polices de caractères ne sont pas mises en cache, donc si vous prévoyez d'utiliser ce code, vous devez également créer un cache de polices personnalisé afin de pouvoir réutiliser le police de caractères personnalisée pour toutes les vues de texte. Cela accélérera considérablement l'application!
MISE À JOUR: Comme disait Amir, c'est presque la même chose que Polices personnalisées et mises en page XML (Android) mais j'utilise aussi Android style pour l'utiliser automatiquement sur toutes les vues de texte dans l'application.
Créez une sous-classe TextView et utilisez-la 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);
}
}
}
usage
<com.test.RobotoTextView
Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
/>
dans le code Java vous pouvez le caster en TextView
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(),
"fonts/Verdana.ttf");
tv.setTypeface(face);
placez le fichier de police dans le dossier des polices dans/res /
Comme ma réponse si elle est utile ...
Vous pouvez étendre TextView comme suggéré ici et définir votre police de caractères dessus, puis l'utiliser dans toute l'application.