Recherche…


Mettre une police personnalisée dans votre application

  1. Allez dans le (dossier du projet)
  2. Alors app -> src -> main.
  3. Créez le dossier 'assets -> fonts' dans le dossier principal.
  4. Mettez votre "fontfile.ttf" dans le dossier des polices.

Initialisation d'une police

private Typeface myFont;

// A good practice might be to call this in onCreate() of a custom
// Application class and pass 'this' as Context. Your font will be ready to use
// as long as your app lives
public void initFont(Context context) {
    myFont = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf");
}

Utiliser une police personnalisée dans un TextView

public void setFont(TextView textView) {
    textView.setTypeface(myFont);    
}

Appliquer la police sur TextView par xml (code Java non requis)

TextViewPlus.java:

public class TextViewPlus extends TextView {
    private static final String TAG = "TextView";

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

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

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

    private void setCustomFont(Context ctx, AttributeSet attrs) {
        TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
        String customFont = a.getString(R.styleable.TextViewPlus_customFont);
        setCustomFont(ctx, customFont);
        a.recycle();
    }

    public boolean setCustomFont(Context ctx, String asset) {
        Typeface typeface = null;
        try {
            typeface = Typeface.createFromAsset(ctx.getAssets(), asset);
        } catch (Exception e) {
            Log.e(TAG, "Unable to load typeface: "+e.getMessage());
            return false;
        }

        setTypeface(typeface);
        return true;
    }
}

attrs.xml: (Où placer les res / values )

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="TextViewPlus">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources>

Comment utiliser:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:foo="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.mypackage.TextViewPlus
        android:id="@+id/textViewPlus1"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:text="@string/showingOffTheNewTypeface"
        foo:customFont="my_font_name_regular.otf">
    </com.mypackage.TextViewPlus>
</LinearLayout>

Police personnalisée dans le texte de toile

Dessiner du texte sur la toile avec votre police à partir d'éléments.

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/SomeFont.ttf");
Paint textPaint = new Paint();
textPaint.setTypeface(typeface);
canvas.drawText("Your text here", x, y, textPaint);

Chargement de police efficace

Le chargement de polices personnalisées peut entraîner de mauvaises performances. Je recommande fortement d'utiliser cette petite aide qui sauvegarde / charge vos polices déjà utilisées dans une table de hachage.

public class TypefaceUtils {

private static final Hashtable<String, Typeface> sTypeFaces = new Hashtable<>();

/**
 * Get typeface by filename from assets main directory
 *
 * @param context
 * @param fileName the name of the font file in the asset main directory
 * @return
 */
public static Typeface getTypeFace(final Context context, final String fileName) {
    Typeface tempTypeface = sTypeFaces.get(fileName);

    if (tempTypeface == null) {
        tempTypeface = Typeface.createFromAsset(context.getAssets(), fileName);
        sTypeFaces.put(fileName, tempTypeface);
    }

    return tempTypeface;
}

}

Usage:

Typeface typeface = TypefaceUtils.getTypeface(context, "RobotoSlab-Bold.ttf");
setTypeface(typeface);

Police personnalisée pour toute l'activité

public class ReplaceFont {

public static void changeDefaultFont(Context context, String oldFont, String assetsFont) {
    Typeface typeface = Typeface.createFromAsset(context.getAssets(), assetsFont);
    replaceFont(oldFont, typeface);
}

private static void replaceFont(String oldFont, Typeface typeface) {
    try {
        Field myField = Typeface.class.getDeclaredField(oldFont);
        myField.setAccessible(true);
        myField.set(null, typeface);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

Ensuite, dans votre activité, dans la méthode onCreate() :

// Put your font to assets folder...

ReplaceFont.changeDefaultFont(getApplication(), "DEFAULT", "LinLibertine.ttf");

Travailler avec des polices dans Android O

Android O change la façon de travailler avec les polices.

Android O introduit une nouvelle fonctionnalité, appelée Fonts in XML , qui vous permet d’utiliser des polices en tant que ressources. Cela signifie qu'il n'est pas nécessaire de regrouper les polices en tant qu'actifs. Les polices sont maintenant compilées dans un fichier R et sont automatiquement disponibles dans le système en tant que ressource.

Pour ajouter une nouvelle police , vous devez effectuer les opérations suivantes:

  • Créez un nouveau répertoire de ressources: res/font .
  • Ajoutez vos fichiers de polices dans ce dossier de polices. Par exemple, en ajoutant myfont.ttf , vous pourrez utiliser cette police via R.font.myfont .

Vous pouvez également créer votre propre famille de polices en ajoutant le fichier XML suivant dans le répertoire res/font :

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

Vous pouvez utiliser le fichier de polices et le fichier de famille de polices de la même manière:

  • Dans un fichier XML, en utilisant l'attribut android:fontFamily , par exemple comme ceci:

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/myfont"/>
    

    Ou comme ça:

    <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/myfont</item>
    </style>
    
  • Dans votre code , en utilisant les lignes de code suivantes:

    Typeface typeface = getResources().getFont(R.font.myfont);
    textView.setTypeface(typeface);
    


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow