Définir une police spécifique dans un style.XML

Je définis un style XML pour mon application android. J'ai quelques fichiers TTF que je veux utiliser, Comment puis-je définir la police de caractères pour utiliser ces fichiers comme police par opposition au générique "sans", "serif" et "monospace". Merci

26
demandé sur CommonsWare 2010-04-01 21:46:36

7 réponses

Vous ne pouvez utiliser que des polices personnalisées via le code Java, pas via la mise en page XML ou styles / thèmes-désolé!

46
répondu CommonsWare 2010-04-01 17:54:05

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: (dans res/valeurs)

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

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

Tu mettrais "saxmono.ttf" dans le actif dossier.

16
répondu luttu android 2013-12-16 12:40:01
<?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
répondu rajeesh 2012-11-08 09:59:27

Oui, vous pouvez :)

Étape 1: Créez un dossier et nommez-le' font ' et votre .ttf à l'intérieur. La première étape

Étape 2: Allez dans style.xml et procédez comme suit : - étape deux

Étape 3: Utilisez la balise style dans l'objet any UI: -

Étape trois

4
répondu Laura Taylor 2018-08-16 17:09:34

J'ai créé un petit tutoriel à ce sujet... J'espère que cela peut être utile http://spinettaro.blogspot.it/2013/01/custom-font-for-view.html

2
répondu Spinettaro 2013-01-15 19:30:28

entrez la description de l'image ici

Créez un répertoire de police dans le dossier de ressources et collez votre fichier de police ttf. Ensuite, créez une ressource de police XML 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 voulez faire à partir du code, utilisez ce qui suit, mais le niveau D'API minimum 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é Fonts in XML sur les appareils fonctionnant sous Android 4.1 (niveau API 16) et supérieur.

Typeface typeface = ResourcesCompat.getFont(context, R.font. roboto_light_italic);
0
répondu Ebin Joy 2018-09-21 16:31:52

Voir l'exempleAPIDemos dans la Documentation.

-3
répondu Praveen 2010-04-02 14:21:00