J'ai développé un projet Android. Dans ce projet, la police de texte par défaut est Android: sans.
Maintenant, je souhaite remplacer la police de texte par défaut par roboto pour l'ensemble de mon projet.
Comment puis-je faire ceci?
Vous pouvez télécharger la police Roboto à partir d'ici: https://www.google.com/design/spec/resources/roboto-noto-fonts.html .
Vous pouvez le faire de manière conventionnelle en utilisant TypeFace
, comme ceci:
Typeface typeface = Typeface.createFromAsset(getAssets(), fontName);
textView.setTypeface(typeface);
Remarque: Ce qui précède devra être effectué dans chaque Activity
.
Alternativement, si, par exemple, vous souhaitez appliquer la police Roboto à tous les caractères TextView's
dans votre application, vous devrez alors créer votre propre widget qui s'étend sur TextView
.
Il y a un moyen simple de le faire. Suivez les étapes de cette réponse à SO: https://stackoverflow.com/a/9199258/450534 (accessoires complets à léocadiotine pour la solution, je l'ai déjà utilisé et ça marche à merveille)
EDIT: Pensez à your_namespace
comme marqueur pour vous permettre de lui donner le nom de votre choix. Par exemple, lors de l'intégration d'Admob en XML, j'utilise xmlns:ads
. Vous pouvez utiliser, par exemple: xmlns:font
ou quelque chose de descriptif.
Quant à ce que signifie custom.ttf, il s’agit essentiellement du fichier de police avec son extension que vous devez copier dans votre dossier Assets
. Par exemple, si vous utilisez ROBOTO-REGULAR.TTF , remplacez le custom.ttf par ROBOTO-REGULAR.TTF. En utilisant cet exemple, le code entier devrait ressembler à ceci:
<your.package.widget.TypefacedTextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:font="http://schemas.Android.com/apk/res/your.package"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Custom fonts in XML are easy"
Android:textColor="#FFF"
Android:textSize="14dip"
font:typeface="ROBOTO-REGULAR.TTF" />
Télécharger et décompressez le fichier Zip de la police Roboto
Créez un dossier assets
dans votre projet si vous n'en avez pas déjà. Je suppose que vous utilisez Android Studio, voici comment procéder.
Créez un nouveau répertoire dans le dossier assets, nommez-le font
.
Ouvrez votre fichier décompressé et copiez le style de police de votre choix. Votre dossier de police devrait ressembler à ceci:
Vous pouvez maintenant utiliser cette police n'importe où dans votre application comme ceci:
Typeface roboto = Typeface.createFromAsset(context.getAssets(),
"font/Roboto-Bold.ttf"); //use this.getAssets if you are calling from an Activity
txtView.setTypeface(roboto);
Vous pouvez le faire facilement en utilisant le Typerlib .
Cette bibliothèque simplifie l'ajout d'une ressource de police dans votre projet et recycle les polices récemment créées afin d'optimiser les performances de votre application.
Ajoutez ceci à votre build.gradle
dependencies {
compile 'com.elmargomez.typer:typerlib:1.0.0'
}
Ensuite, vous pouvez utiliser la police par
TextView txtView1 = (TextView) findViewById(R.id.yourTxtView1);
TextView txtView2 = (TextView) findViewById(R.id.yourTxtView2);
TextView txtView3 = (TextView) findViewById(R.id.yourTxtView3);
TextView txtView4 = (TextView) findViewById(R.id.yourTxtView4);
txtView1.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_REGULAR));
txtView2.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_CONDENSED_ITALIC));
txtView3.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_THIN));
txtView4.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_BOLD));
Il comprend toutes les polices actuelles dans Roboto, comme:
Font.ROBOTO_MEDIUM
Font.ROBOTO_REGULAR
etc.
Pour afficher toutes les polices disponibles, utilisez Android Studio Auto complète après la classe Police en appuyant sur Ctrl + space.
txtView = (TextView) findViewById(R.id.txtView);
Typeface myTypeface = Typeface.createFromAsset(
this.getAssets(),
"font/Robot.otf");
txtView.setTypeface(myTypeface);
Encore une remarque pour l'utilisation de la fonction Typeface.createFromAsset()
. Quand j'ai eu beaucoup d'appels, cela a eu un impact significatif sur le temps de gonflage. Pour résoudre ce problème, nous avons créé une instance singleton du Typeface
comme ceci
public static Typeface getTypeFace() {
if (fromAsset == null) {
fromAsset = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Medium.ttf");
}
return fromAsset;
}