avant-propos
Cet article présente Android pour implémenter des polices personnalisées à paramètres globaux et des polices personnalisées à paramètres locaux, c'est-à-dire définir des polices pour un seul TextView. En même temps, il fournit également d'excellents cadres de polices tripartites, qui peuvent essentiellement répondre à toutes les exigences des développeurs pour paramètres de police.
Effets avant et après l'utilisation de polices personnalisées
1. Que sont les actifs ?
Tout d'abord, il faut bien comprendre les atouts d'Android , bref, vos photos et fichiers svg sont placés sous res/drawabe du projet, et les fichiers de police utilisés pour définir la police sont situés sous assets. Comment créer un répertoire d'actifs, cliquez pour entrer
2. Police globale APP
2.1. Importer une bibliothèque
Le code est le suivant (exemple) :
// Utilisé pour définir l' implémentation globale de la police de l'application 'uk.co.chrisjenx:calligraphy:2.2.0'
2.2. Initialiser la calligraphie dans l'application
Le code est le suivant (exemple) :
public class MyApplication étend Application { @Override public void onCreate() { super.onCreate(); exemple = ceci ; //app字体 CalligraphyConfig.initDefault( new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/OpenSans-Regular.ttf") .setFontAttrId(R.attr.fontPath) .build() ); } public static LightMeterApplication getInstance() { retourne l'instance ; } }
Configurez une MyApplication personnalisée dans AndroidManifest.xml pour remplacer l'application par défaut
<application android:name=".MyApplication" android:allowBackup="false" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@ style/AppTheme">
Ci-dessous mon répertoire de polices
Téléchargez la police, cliquez pour entrer le code d'extraction : 2555 Vous pouvez également importer la police fournie avec Windows, le chemin de la police : C:\Windows\Fonts My Win10 est livré avec 263 fichiers de police, ce qui suit est une capture d'écran du fichier de police
2.3. Laisser l'activité spécifiée configurer les polices personnalisées
remplacer attachBaseContext
2.3.1 Paramètres Java
// L'activité qui n'est pas réécrite est toujours la police par défaut d'Android @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); }
2.3.2 paramètres kotlin
override fun attachBaseContext(newBase : Context) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)) }
2.4 Erreur d'environnement de développement Android Q et Android X
Si votre projet met à niveau l'environnement AndroidX et débogue sur Android Q, l'erreur suivante sera signalée
E/AndroidRuntime : EXCEPTION FATAL : processus principal : com.bigcat.edulearnaid, PID : 21204 java.lang.RuntimeException : impossible de démarrer l'activité ComponentInfo{com.bigcat.edulearnaid/com.bigcat.edulearnaid.ui.StartActivity} : android. view.InflateException : ligne de fichier XML binaire n° 17 dans com.bigcat.edulearnaid : layout/abc_screen_simple : ligne de fichier XML binaire n° 17 dans com.bigcat.edulearnaid : layout/abc_screen_simple : erreur de gonflage de la classe androidx.appcompat.widget.FitWindowsLinearLayout sur Android .app.ActivityThread.performLaunchActivity(ActivityThread.java:3895)
Résolution :
Ajoutez les dépendances suivantes dans le projet build.gradle pour remplacer uk.co.chrisjenx:calligraphy:2.2.0
implémentation 'io.github.inflationx:calligraphy3:3.1.1' implémentation 'io.github.inflationx:viewpump:2.0.3'
Initialiser dans onCreate() de l'application :
2.4.1 paramètres java
ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build())) .build()) ;
2.4.2 Paramètres Kotlin
ViewPump.init( ViewPump.builder() .addInterceptor( CalligraphyInterceptor( CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build() ) .build( ) )
@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); }
2.5 Utiliser le thème pour modifier la police globale
Dans l'application, android:theme
configurez un thème d'application via . Généralement, les projets nouvellement créés sont @style/AppTheme
. Ajoutez-y les propriétés de la police android:fontFamily
et cela peut compléter le réglage global d'une police système.
3. Définir la police d' un seul TextView
Contrairement à la définition de la police globale, il n'est pas nécessaire de configurer l'application, pas besoin d'introduire la calligraphie de la bibliothèque dépendante et le chemin de la police doit encore être configuré. Utilisez la méthode suivante pour terminer le paramétrage de la police
3.1 Implémentation avec Typeface + .ttf
3.1.1 Java
Typeface protégée tfRegular;//Définir la police { tfRegular = Typeface.createFromAsset(getActivity().getAssets(), "fonts/OpenSans-Regular.ttf");//Initialiser la police textView.setTypeface(tfRegular); }
3.1.2 kotline
protected var tfRegular : Typeface ? = null // définit la police get() = field ?: Typeface.createFromAsset(requireActivity().assets, "fonts/OpenSans-Regular.ttf") // initialise la police textView.typeface = tfRegular / / définir la police
3.2 Utiliser les propres polices du SDK
noraml (police commune, la police utilisée par défaut par le système) sans (police sans serif) serif (police serif) monospace (police à espacement fixe)
3.2.1 Implémentation via xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="580.6Ix" android:gravity="center" android:textStyle="bold" android:textSize="20sp" android:typeface=" serif" android:textColor="@color/white"/> <!-- android:textStyle="bold" font bold --> <!-- android:letterSpacing="0.2" font augmenter l'espacement --> <! - - android:typeface="serif" Définir la propre police du SDK -->
3.2.2 Implémentation via le code logique Java
vSansText = (TextView) findViewById(R.id.sans); vSerifText = (TextView) findViewById(R.id.serif); vMonospaceText = (TextView) findViewById(R.id.monospace); //设置字体样式 vSansText.setTypeface(Typeface.SANS_SERIF); vSerifText.setTypeface(Typeface.SERIF); vMonospaceText.setTypeface(Typeface.MONOSPACE);
3.2.3 Implémentation via le code logique kotlin
vSansText = findViewById(R.id.sans) vSerifText = findViewById(R.id.serif) vMonospaceText = findViewById(R.id.monospace) // 设置字体样式 vSansText.typeface = Typeface.SANS_SERIF vSerifText.typeface = Typeface.SERIF vMonospaceText.typeface = Typeface.MONOSPACE
3.3 Utiliser RoBoto pour définir la police en xml
Les polices qui peuvent être personnalisées via XML incluent également Roboto. Après Android 4.0, Roboto est utilisé comme police par défaut. Si vous voulez en savoir plus sur Robote, vous pouvez le vérifier sur le site Web de Google . Voici comment l'utiliser :
3.3.1 Utiliser android:fontFamily en xml
android:fontFamily="sans-serif" // roboto regular android:fontFamily="sans-serif-light" // roboto light android:fontFamily="sans-serif-condensed" // roboto condensé android:fontFamily="sans- serif-thin" // roboto thin (android 4.2) //en combinaison avec android:textStyle="normal|bold|italic"
Les polices normale et sans sont en fait les mêmes, serif est une police serif et nonospace est une police à chasse fixe.
serif ajoute des empattements à la police par défaut. Et nonospace limite la largeur de chaque caractère, de sorte qu'ils obtiennent un effet de largeur égale.
3.3.2 Attribut du paramètre fontFamily
Police de caractère | caractéristiques des attributs |
---|---|
Régulier | police standard |
Italique | police italique |
Audacieux | caractère gras |
Gras italique | gras et italique |
Lumière | police sans empattement |
Léger italique | italique sans empattement |
Mince | beau corps |
Italique fin | italique fin |
Condensé régulier | Utilisé pour la décoration de texte, l'affichage d'informations, la conception de sites Web, la découpe de sceaux et la fabrication de moules[cr] |
Italique condensé | version italique cr |
Gras condensé | cr gras |
Gras-italique condensé | version italique gras cr |
3.3.3 fontFamily charge les polices sous le paquet de ressources de police
1. Mettez la police téléchargée dans le fichier suivant
2. Référence en xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/anyeguihuapiaoxiang" android:text="Définir la police d'un seul TextView - via le fichier de ressources de police" />
A noter que si typeface
et sont configurés en même temps, la police configurée fontFamily
sera utilisée .fontFamily
3.4 style de texte
textStyle
Il est principalement utilisé pour définir le style de certaines polices et il est valable pour toutes les polices. C'est-à-dire que même si vous remplacez la police, vous pouvez toujours utiliser textStyle
pour modifier son style. Il existe des options facultatives prises en charge par textStyle lui-même normal|bold|italic
, et elles sont également très faciles à comprendre, c'est-à-dire 普通|粗体|斜体
.
3.4.1 Utilisation en xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Set the font-textStyle of a single TextView" android:textStyle="bold|italic" />
3.5 Andorid 8.0+ définit et utilise les polices dans les ressources
1. Cliquez avec le bouton droit sur le dossier res et accédez à Nouveau> Répertoire de ressources Android. La fenêtre Nouveau répertoire de ressources s'affiche.
2. Dans la liste Type de ressource, sélectionnez une police et cliquez sur OK.
3. Ajoutez le fichier de polices au dossier de polices.
4. Double-cliquez sur le fichier de police pour prévisualiser la police du fichier dans l'éditeur.
Ces quatre étapes consistent à créer un fichier de ressources de police et à placer la police téléchargée dans le fichier
3.5.1 Création de polices
1. Faites un clic droit sur le dossier de polices et allez dans "Nouveau" > "Fichier de ressources de polices". La fenêtre Nouveau fichier de ressources s'affiche.
2. Entrez un nom de fichier et cliquez sur OK. Une nouvelle ressource de police XML s'ouvrira dans l'éditeur.
3. Encapsulez chaque fichier de police, style et attribut de poids dans un élément <font>. Le XML suivant illustre l'ajout d'attributs liés à la police dans le XML de la ressource de police :
<?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/lobster_regular" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/lobster_italic" /> < /font-family>
3.5.2 Utilisation dans TextView
Dans le fichier XML de mise en page, définissez l'attribut fontFamily sur le fichier de police auquel vous souhaitez accéder.
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/lobster"/>
3.5.3 Appel dynamique
Police de caractères police de caractères = ResourcesCompat.getFont(context, R.font.lobster);
4. Excellent cadre de fonction de police personnalisé
4.1 Définition des styles de texte via Spannables
★ 659-
4.2 Rendre les mots-clés cliquables souligner TextView
UnderLineLinkTextView ★327 -
4.3 Taille de la police de zoom avec des gestes
PincezZoomTextView ★272 -
4.4 Code couleur de certaines phrases
CouleurTextView ★214 -