web-dev-qa-db-fra.com

Définir une police spécifique dans styles.xml

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

26
user180825

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é!

45
CommonsWare

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.

16
luttu android
<?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>
7
rajeesh

Oui, vous pouvez :) 

étape 1: Créez un dossier et nommez-le 'police' et votre fichier .ttf à l'intérieur . Step one

étape 2: Accédez à style.xml et procédez comme suit: - step two

étape 3: Utilisez la balise style dans l’un des objets UI: - 

Step three

5
Laura Taylor

 enter image description here

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);
0
Ebin Joy