Comment utiliser une police personnalisée dans un projet écrit dans Android Studio

Réponses:

375

Mise à jour 2020:

Créez un dossier nommé police dans le dossier res et copiez votre police

entrez la description de l'image ici

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

Pour une utilisation programmatique:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))
Asim Roy
la source
11
Quiconque charge des polices personnalisées à partir d'actifs doit noter qu'il existe un bogue dans Android 5.0 où certaines polices ne se chargent pas. Bien que ce problème ait été résolu dans Android 5.1, une solution de contournement pour prendre en charge la version 5.0 consiste à réécrire les polices ttf. Voir ce numéro pour plus d'informations stackoverflow.com/questions/27269264/…
BrentM
La deuxième option a parfaitement fonctionné pour moi. Merci pour cela!
Emzor le
2
J'ai utilisé this.getContext (). getApplicationContext (). getAssets () pour trouver le répertoire (android studio 2.1)
kuzdu
1
@kuthue onCreate () est très bien. Si vous souhaitez modifier la police pendant que l'utilisateur utilise l'application, vous pouvez la placer à l'endroit où vous souhaitez qu'elle soit modifiée. Cela fonctionne aussi pour les boutons
rockhammer
1
Comment puis-je définir que la police par défaut pour l'ensemble du projet sera celle personnalisée que j'ajoute? Est-ce ce que fait le premier exemple de code?
Yonatan Nir
99

https://i.stack.imgur.com/i6XNU.png

  1. Sélectionnez Fichier> Nouveau> Dossier> Dossier d'actifs

  2. Cliquez sur Terminer

  3. Faites un clic droit sur les actifs et créez un dossier appelé polices

  4. Mettez votre fichier de polices dans actifs > polices

  5. Utilisez le code ci-dessous pour changer la police de votre textView

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);
    
Ehsan.R
la source
12
comment l'utiliser en xml?
Suisse
4
Ce tutoriel explique comment l'utiliser dans un XML: stacktips.com/tutorials/android
Dinesh
@Suisse La bibliothèque de support 26 fournit une prise en charge complète de cette fonctionnalité sur les appareils exécutant les versions d'API 14 et plus lien
Ehsan.R
69

Il existe de nombreuses façons de définir une famille de polices personnalisée sur le terrain et j'utilise comme ci-dessous.

Pour ajouter des polices en tant que ressources, effectuez les étapes suivantes dans Android Studio:

1) Cliquez avec le bouton droit sur le dossier res et allez dans Nouveau> répertoire de ressources Android. La fenêtre Nouveau répertoire de ressources apparaît.

2) Dans la liste Type de ressource, sélectionnez la police, puis cliquez sur OK.

Remarque: le nom du répertoire de ressources doit être police.

3) Ajoutez vos fichiers de polices dans le dossier de polices. entrez la description de l'image ici

Ajoutez la police dans la vue souhaitée dans votre fichier xml:

entrez la description de l'image ici

Remarque: Mais vous avez besoin des éléments suivants pour cela:

  1. Android Studio ci-dessus à 3.0 canary.

  2. Votre activité étend AppCompatActivity.

  3. Mettez à jour votre fichier Gradle comme ça:

    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {        
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildtoolsVersionci-dessus à 26 et minimum targetSdkVersionrequis 26

  1. Ajoutez des dépendances dans le fichier build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
  1. gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
Vinod Makode
la source
43

Je pense qu'au lieu de télécharger un fichier .ttf, nous pouvons utiliser des polices Google. C'est très facile à mettre en œuvre. il vous suffit de suivre ces étapes. étape 1) Ouvrez layout.xml de votre projet et sélectionnez la famille de polices de vue texte dans les attributs (pour référence, la capture d'écran est jointe) entrez la description de l'image ici

étape 2) Dans la famille de polices, sélectionnez l'option Plus de polices .. si votre police n'y est pas. alors vous verrez une nouvelle fenêtre s'ouvrira, là vous pouvez taper votre police requise et sélectionner la police désirée dans cette liste ie) Regular, Bold, Italic etc. comme indiqué dans l'image ci-dessous. entrez la description de l'image ici

étape 3) Ensuite, vous observerez qu'un dossier de polices sera généré automatiquement dans le dossier / res contenant le fichier xml des polices sélectionnées.

entrez la description de l'image ici

Ensuite, vous pouvez directement utiliser cette famille de polices en xml comme

      android:fontFamily="@font/josefin_sans_bold"

ou programmatiquement, vous pouvez y parvenir en utilisant

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);
Sandeep Sankla
la source
Ce n'est pas une réponse à la question. Toutes les polices ne sont pas disponibles sur Google Fonts.
Matt Fletcher
2
Bonne réponse! Si vous ne trouvez pas votre police dans la liste - chargez-la dans le dossier assets ou définissez-la via le xml
Edgar Khimich
21

Bonjour, nous avons un meilleur moyen d'appliquer des polices sur EditTexts et TextViews sur Android à la fois et de les appliquer dans tout le projet.

Tout d'abord, vous devez créer un dossier de polices. Voici les étapes.

1: Allez dans le (dossier du projet) puis app> src> main

2: Créez des dossiers nommés «assets / fonts» dans le dossier principal.

3: Mettez vos polices dans le dossier des polices. Ici, j'ai 'MavenPro-Regular.ttf'

Voici les étapes pour appliquer des polices personnalisées sur EditText et en utilisant cette approche, vous pouvez appliquer des polices sur chaque entrée.

1: Créez une classe MyEditText (votre nom préféré ...)

2: qui étend EditText

3: appliquez votre police

Voici l'exemple de code;

public class MyEditText extends EditText {

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyEditText(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf");
            setTypeface(tf);
        }
    }

}

Et dans Voici le code comment l'utiliser.

MyEditText editText = (MyEditText) findViewById(R.id.editText);

editText.setText("Hello");

Ou dans votre fichier xml

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />
Mohammad Naim Dahee
la source
Cette classe m'a donné cette erreur lors de l'exécution: Erreur de gonflage de la classe MyEditText
GMX
Reportez-vous à ce lien, vous trouverez peut-être des astuces pour résoudre l'erreur.
Mohammad Naim Dahee
Avec la version actuelle, je pense que vous auriez besoin de changer cela en "étend AppCompatEditText".
Diesel
15

Avec Support Library 26.0 (et Android O), les polices peuvent être chargées facilement à partir d'une ressource avec: entrez la description de l'image ici

Typeface typeface = ResourcesCompat.getFont(Context context, int fontResourceId) 

Docs pour la méthode .

Plus d'informations peuvent être trouvées ici.

makata
la source
9

Je souhaite ajouter ma réponse pour Android-O et Android Studio 2.4

  1. Créez un dossier appelé police sous le dossier res . Téléchargez les différentes polices que vous vouliez ajouter à votre projet exemple de polices Google

  2. Dans votre famille de polices utilisateur XML

    exemple :

    <TextView
        android:fontFamily="@font/indie_flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/sample_text" />
    

3.Si vous voulez que ce soit de manière programmatique, utilisez le code suivant

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

pour plus d'informations, suivez le lien vers mon article de blog Styles de police pour Android avec Android Studio 2.4

Suresh Maidaragi
la source
6
Veuillez noter que si vous souhaitez promouvoir votre propre produit / blog, vous devez divulguer votre affiliation , sinon votre réponse peut être signalée comme spam. S'il vous plaît lire Comment ne pas être un spammeur
DavidPostill
Oui @PetterFriberg
Suresh Maidaragi
9

Selon la nouvelle fonctionnalité disponible dans Android O, les ressources de polices en XML sont disponibles en tant que nouvelle fonctionnalité.

Pour ajouter des polices en tant que ressources, effectuez les étapes suivantes dans Android Studio:

1) Cliquez avec le bouton droit sur le dossier res et allez dans Nouveau> répertoire de ressources Android . La fenêtre Nouveau répertoire de ressources apparaît.

2) Dans la liste Type de ressource, sélectionnez la police , puis cliquez sur OK.

Remarque: le nom du répertoire de ressources doit être police.

3) Ajoutez vos fichiers de polices dans le dossier de polices.

Vous pouvez accéder aux ressources de police à l'aide d'un nouveau type de ressource, police. Par exemple, pour accéder à une ressource de police, utilisez @ font / myfont ou R.font.myfont.

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

Dharmishtha
la source
2
devrait être ResourcesCompat.getFont (context, R.font.your_font)
Trung Le
7

Vous pouvez utiliser la bibliothèque tierce EasyFonts facile et simple pour définir une variété de polices personnalisées sur votre TextView. En utilisant cette bibliothèque, vous ne devriez pas avoir à vous soucier du téléchargement et de l'ajout de polices dans le dossier assets / fonts. Également sur la création d'objets Typeface. Vous serez également libre de créer un dossier d'actifs.

Simplement:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Il existe de nombreux types de polices fournis par cette bibliothèque.

Vijay Vankhede
la source
6

1er ajouter le fichier font.ttf sur le dossier de polices. Ajoutez ensuite cette ligne dans la méthode onCreate

    Typeface typeface = ResourcesCompat.getFont(getApplicationContext(), R.font.myfont);
    mytextView.setTypeface(typeface);

Et voici mon xml

            <TextView
            android:id="@+id/idtext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:text="My Text"
            android:textColor="#000"
            android:textSize="10sp"
        />
DEVSHK
la source
4
  1. Créez des actifs de dossier dans Project -> app (ou le nom de votre application) -> src -> main -> clic droit -> Nouveau -> Répertoire.
  2. Ensuite, créez un nouveau répertoire à l'intérieur des actifs appelés "polices".

Pour attribuer la police à textView:

TextView textView = (TextView) findViewById(R.id.your_textView);

final Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/your_font_name");

your_font_name inclut l'extension de police.

GmloMalo
la source
3

Si vous êtes nouveau sur Android comme moi, cela peut être un peu délicat. Assurez-vous d'appeler:

TextView myTextView = (TextView) findViewById(R.id.textView);
Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/your font.ttf");
myTextView.setTypeface(typeface);

méthode dans une méthode telle que onCreate.

user4509901
la source
3

Android 8.0 (API 26) a introduit de nouvelles fonctionnalités liées aux polices.

1) Les polices peuvent être utilisées comme ressources.

2) Polices téléchargeables.

Si vous souhaitez utiliser des polices externes dans votre application Android, vous pouvez soit inclure des fichiers de polices dans apk, soit configurer des polices téléchargeables.

Y compris les fichiers de polices dans l'APK : vous pouvez télécharger des fichiers de polices, les enregistrer dans res / font filer, définir la famille de polices et utiliser la famille de polices dans les styles.

Pour plus de détails sur l'utilisation des polices personnalisées en tant que ressources, consultez http://www.zoftino.com/android-using-custom-fonts

Configuration des polices téléchargeables : définissez la police en fournissant les détails du fournisseur de polices, ajoutez un certificat de fournisseur de polices et utilisez la police dans les styles.

Pour plus de détails sur les polices téléchargeables, consultez http://www.zoftino.com/downloading-fonts-android

Arnav Rao
la source
2
Documentation officielle: developer.android.com/guide/topics/ui/look-and-feel/…
Parziphal
1
De plus, ce n'est pas parce que les polices personnalisées / téléchargeables ont été introduites dans Android O (8.0) qu'il n'y a pas de rétrocompatibilité. Veuillez consulter la documentation officielle sur la façon d'implémenter les polices personnalisées. Veuillez noter que vous devrez peut-être également installer Android Studio 3.0.
anthonymonori
1

Créez d'abord un assetsdossier, puis créez-y un fontsdossier.

Ensuite, vous pouvez définir à fontpartir de assetsou directorycomme ci-dessous:

public class FontSampler extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.custom);
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");

        tv.setTypeface(face);

        File font = new File(Environment.getExternalStorageDirectory(), "MgOpenCosmeticaBold.ttf");

        if (font.exists()) {
            tv = (TextView) findViewById(R.id.file);
            face = Typeface.createFromFile(font);

            tv.setTypeface(face);
        } else {
            findViewById(R.id.filerow).setVisibility(View.GONE);
        }
    }
} 

la source
1

Maintenant, il y a tellement de façons d'appliquer la police, l'un des moyens les plus simples est comme ceci, 1) Cliquez avec le bouton droit sur le dossier res et allez dans Nouveau> répertoire de ressources Android.

2) Dans la liste Type de ressource, sélectionnez la police, puis cliquez sur OK.

3) Mettez vos fichiers de polices dans le dossier des polices.

Priya
la source
1

Ajoutez vos polices au dossier assets dans app / src / main / assets pour créer une vue de texte personnalisée comme celle-ci:

class CustomLightTextView : TextView {

constructor(context: Context) : super(context){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet):    super(context, attrs){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet?,    defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    attachFont(context)
}
fun attachFont(context: Context) {
    this.setTypeface(FontCache.getInstance().getLightFont(context))
}

}

Ajoutez FontCache: pour que vous n'ayez pas à créer une police encore et encore comme:

class FontCache private constructor(){

val fontMap = HashMap<String,Typeface>()

companion object {
    private var mInstance : FontCache?=null
    fun getInstance():FontCache = mInstance?: synchronized(this){
        return mInstance?:FontCache().also { mInstance=it }
    }
}

fun getLightFont(context: Context):Typeface?{
    if(!fontMap.containsKey("light")){
        Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf");
        fontMap.put("light",Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf"))
    }
    return fontMap.get("light")
}

}

Et vous avez terminé!

PSDepuis android O, vous pouvez directement ajouter des polices.

ROHIT LIEN
la source
1

mettez les polices dans le dossier des ressources puis appliquez fontfamily: '' vos polices


la source
0

Je ne pouvais pas charger les polices parce que j'avais nommé mon fichier de polices Poppins-Medium.tff, le renommer en poppins_medium.tff fonctionnait pour moi. Le reste des étapes est resté le même:

  • Créez le répertoire de ressources de polices sous le dossier res
  • Copiez et collez votre fichier tff dans ce répertoire
  • Utilisez ensuite dans TextView en XML à l'aide de l'attribut fontFamily.
  • Si les étapes ci-dessus ne fonctionnent pas, vous pouvez créer une FontFamily de cette police en utilisant ce lien
NullByte08
la source
-2

Pour les nouveaux lecteurs

Vous pouvez utiliser cette bibliothèque Gloxey Custom Font Views

dépendance gradle

  dependencies{
           compile 'io.gloxey.cfv:custom-font-views:1.0.2'
    }

Comment utiliser?

Créez des ressources de dossier -> polices . Copiez vos polices dans des polices dossier des .

Utilisez l' application de propriété : font_name = "font_name_string" pour appliquer la police sur la vue.

Exemple

   <!--Font Names in srings.xml-->
       <string name="aadhunik">aadhunik.ttf</string>
       <string name="kung_fool">kungfool.ttf</string>
       <string name="skrova">skrova.otf</string>
       <string name="painting_in_the_sun_light">painting_in_the_sun_light.ttf</string>

   <!--Include views in layout.xml-->
       <io.gloxey.cfv.CFTextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Aadhunik"
       android:textColor="#ff00"
       android:textSize="40sp"
       app:font_name="@string/aadhunik" />

       <io.gloxey.cfv.CFButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Kung Fool"
       android:textColor="#154748"
       app:font_name="@string/kung_fool" />

       <io.gloxey.cfv.CFEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Hello world"
       android:textSize="30sp"
       app:font_name="@string/skrova" />

       <io.gloxey.cfv.CFCheckBox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="Painting In The Sun Light"
       android:textSize="30sp"
       app:font_name="@string/painting_in_the_sun_light" />
Adnan Bin Mustafa
la source