Je définis un style XML pour mon application Android. J'ai quelques fichiers TTF que je veux utiliser, comment puis-je configurer la police de caractères pour utiliser ces fichiers comme police, par opposition aux génériques "sans", "serif" et "monospace". Merci
Vous ne pouvez utiliser que des polices personnalisées via du code Java, et non par le biais d'une présentation XML ou de styles/thèmes - désolé!
TextViewPlus.Java:
package com.example;
import Android.content.Context;
import Android.content.res.TypedArray;
import Android.graphics.Typeface;
import Android.util.AttributeSet;
import Android.util.Log;
import Android.widget.TextView;
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 tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), asset);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface: "+e.getMessage());
return false;
}
setTypeface(tf);
return true;
}
}
attrs.xml: (en res/valeurs)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TextViewPlus">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
main.xml:
<?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/com.example"
Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<com.example.TextViewPlus
Android:id="@+id/textViewPlus1"
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:text="@string/showingOffTheNewTypeface"
foo:customFont="saxmono.ttf">
</com.example.TextViewPlus>
</LinearLayout>
Vous mettriez "saxmono.ttf" dans le dossier assets.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@Android:style/TextAppearance.Medium">
<item name="Android:layout_width">fill_parent</item>
<item name="Android:layout_height">wrap_content</item>
<item name="Android:textColor">#00FF00</item>
<item name="Android:typeface">monospace</item>
</style>
</resources>
Créez un répertoire de polices dans le dossier de ressources et collez votre fichier de polices ttf. Créez ensuite une ressource XML de police et collez les lignes suivantes.
<?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/roboto_light" />
<font
Android:fontStyle="italic"
Android:fontWeight="400"
Android:font="@font/roboto_light_italic" />
</font-family>
Maintenant, vous pouvez appliquer la police comme ci-dessous. Notez également l'attribut 'textStyle'
<TextView
Android:textStyle="italic"
Android:fontFamily="@font/family_roboto_light"
Android:textColor="@color/primaryTextColor"
Android:textSize="20sp"
Android:gravity="center"
Android:id="@+id/textView36"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="No Internet connection" />
<TextView
Android:fontFamily="@font/family_roboto_light"
Android:textStyle="normal"
Android:textSize="20sp"
Android:gravity="center"
Android:id="@+id/textView37"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="No Internet connection" />
Si vous souhaitez utiliser l’utilisation du code ci-après, mais niveau d’API minimal 26
Typeface typeface = getResources().getFont(R.font. roboto_light_italic);
textView.setTypeface(typeface);
La bibliothèque de support 26.0 prend en charge la fonctionnalité Polices en XML sur les appareils exécutant Android 4.1 (API de niveau 16) et supérieur.
Typeface typeface = ResourcesCompat.getFont(context, R.font. roboto_light_italic);