web-dev-qa-db-fra.com

Comment utiliser une police personnalisée en Android xml?

Comment puis-je utiliser une police personnalisée qui a été ajoutée dans le dossier des ressources de mon xml? Je sais que nous pouvons utiliser la méthode setTypeface() en Java, mais nous devons le faire partout où nous utilisons cette TextView. Alors, y a-t-il une meilleure façon?

25
Vins

La meilleure façon que j'ai trouvée en recherchant sur Google est de dire si vous voulez utiliser TextView, nous devons étendre Textview et définir la police pour que plus tard nous puissions utiliser notre Textview personnalisé dans notre xml. Je vais montrer le TextView étendu ci-dessous

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

}

Nous appelons init () pour définir la police dans chacun des costructors. Plus tard, nous devons l'utiliser dans notre main.xml comme indiqué ci-dessous.

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

Mise à jour:

Soyez conscient de la fuite de mémoire dans la version antérieure à 4.0 Android comme mentionné par pandre.

58
Vins

Mettez votre fichier de police dans asset\fonts\fontname

Définissez trois textview dans votre fichier xml puis mettez ce code dans votre classe d'activité:

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);
    }
}
2
Mitul Goti