web-dev-qa-db-fra.com

Android - Comment définir une police personnalisée pour toute l'application

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

25

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:

Personnaliser Android Polices

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".

22
VicVu

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.

11
Jelle

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

10
Georgy Gobozov
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 ...

7
Aditya Nikhade

Vous pouvez étendre TextView comme suggéré ici et définir votre police de caractères dessus, puis l'utiliser dans toute l'application.

0
Amir