J'ai besoin d'utiliser certaines polices pour toute mon application. J'ai un fichier .ttf pour le même. Est-il possible de définir cela comme police par défaut, au démarrage de l'application, puis de l'utiliser ailleurs dans l'application? Une fois défini, comment puis-je l'utiliser dans mes XML de mise en page?
java
android
android-fonts
Samuh
la source
la source
Réponses:
Oui avec réflexion. Cela fonctionne ( basé sur cette réponse ):
(Remarque: il s'agit d'une solution de contournement en raison du manque de prise en charge des polices personnalisées, donc si vous souhaitez changer cette situation, veuillez commencer à voter pour le problème Android ici ). Remarque: Ne laissez pas de commentaires "moi aussi" sur ce problème, tous ceux qui l'ont regardé reçoivent un e-mail lorsque vous faites cela. Donc, "star" s'il vous plaît.
Vous devez ensuite surcharger les quelques polices par défaut, par exemple dans une classe d' application :
Ou bien sûr, si vous utilisez le même fichier de police, vous pouvez l'améliorer pour le charger une seule fois.
Cependant, j'ai tendance à en remplacer un, disons
"MONOSPACE"
, puis à configurer un style pour forcer cette application de police de caractères à l'échelle:API 21 Android 5.0
J'ai enquêté sur les rapports dans les commentaires qu'il ne fonctionne pas et il semble être incompatible avec le thème
android:Theme.Material.Light
.Si ce thème n'est pas important pour vous, utilisez un thème plus ancien, par exemple:
la source
"DEFAULT_BOLD"
mais aussi un champ privé:private static Typeface[] sDefaults;
vous pouvez essayer d'y accéder en réfléchissant et en paramétrant votresDefaults[Typeface.ITALIC]
Typeface. Regardez ça.TextView
partout pour utiliser des polices personnalisées ou utiliser une solution basée sur la réflexion comme celle-ci. Combiné avec l'ensemble limité de polices disponibles dans Android, il est difficile de développer de belles applications. J'ai ajouté une demande de fonctionnalité au traqueur de problèmes Android. Si vous souhaitez voir cette fonctionnalité, vous pouvez signalerIl existe une excellente bibliothèque de polices personnalisées dans Android: Calligraphie
voici un exemple d'utilisation.
dans Gradle, vous devez mettre cette ligne dans le fichier build.gradle de votre application:
puis créez une classe qui étend
Application
et écrivez ce code:et dans la classe d'activité, mettez cette méthode avant onCreate:
et la dernière chose que votre fichier manifeste devrait ressembler à ceci:
et cela changera toute l'activité en votre police! c'est simple et propre!
la source
<b></b>
,<u></u>
et<i></i>
dans lestrings.xml
fichier et jusqu'à présent, cela fonctionne.Bien que cela ne fonctionnerait pas pour une application entière, cela fonctionnerait pour une activité et pourrait être réutilisé pour toute autre activité. J'ai mis à jour mon code grâce à @ FR073N pour prendre en charge d'autres vues. Je ne suis pas sûr des problèmes avec
Buttons
,RadioGroups
etc., car ces classes s'étendent toutesTextView
et devraient donc fonctionner correctement. J'ai ajouté une condition booléenne pour l'utilisation de la réflexion car elle semble très hackeuse et pourrait notamment compromettre les performances.Remarque: comme indiqué, cela ne fonctionnera pas pour le contenu dynamique! Pour cela, il est possible d'appeler cette méthode avec disons une méthode
onCreateView
ougetView
, mais nécessite un effort supplémentaire.Ensuite, pour l'utiliser, vous feriez quelque chose comme ceci:
J'espère que cela pourra aider.
la source
En résumé:
Option 1: Utilisez la réflexion pour appliquer la police (en combinant la réponse de Weston et Roger Huang ):
Utilisation dans la classe Application:
configurer un style pour forcer cette application de police de caractères à l'échelle (basée sur lovefish ):
Pré-sucette:
Sucette (API 21):
Option2: sous - classe chaque vue où vous devez personnaliser la police, par exemple. ListView, EditTextView, Button, etc. ( réponse de Palani ):
Option 3: implémentez un robot d'exploration qui parcourt la hiérarchie des vues de votre écran actuel:
Variation # 1 ( réponse de Tom ):
Utilisation:
Variation # 2: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Option n ° 4: utilisez une bibliothèque tierce appelée calligraphie .
Personnellement, je recommanderais l'option n ° 4, car elle évite beaucoup de maux de tête.
la source
"sans-serif"
dansnewMap.put(
etmonospace
dansstyles
?! Je souhaite utiliser une police personnalisée nomméebarana.ttf
.Je voudrais améliorer la réponse de weston pour API 21 Android 5.0.
Cause
Sous API 21, la plupart des styles de texte incluent le paramètre fontFamily, comme:
Qui applique la police Roboto Regular par défaut:
La réponse d'origine ne parvient pas à appliquer la police monospace, car android: fontFamily a une priorité plus élevée sur l'attribut android: typeface ( référence ). L'utilisation de Theme.Holo. * Est une solution de contournement valide, car il n'y a pas de paramètres android: fontFamily à l'intérieur.
Solution
Étant donné qu'Android 5.0 place la police système dans la variable statique Typeface.sSystemFontMap ( référence ), nous pouvons utiliser la même technique de réflexion pour la remplacer:
la source
Button
titres s et Tool Bar. Je redéfinissant la police par défaut dans MainApplication comme suit:FontsOverride.setDefaultFont(this, "DEFAULT", "MyFontAsset.ttf");
. J'utilise Nexus 5, v5.1.1Build.VERSION.SDK_INT == 21
- C'est juste dans leAPI 21
test I chez Nexus avec API 22son très simple ... 1.Téléchargez et mettez votre police personnalisée ur dans les actifs ... puis écrivez une classe distincte pour la vue texte comme suit: ici j'ai utilisé la police futura
}
et procédez comme suit en xml:
la source
Je suggérerais également d'étendre TextView et d'autres contrôles, mais il serait préférable d'envisager de configurer la police dans les constructions.
la source
Je voudrais améliorer les réponses de Weston et Roger Huang pour plus de sucette Android 21 API avec le thème " Theme.AppCompat ".
Sous Android 4.4
Plus (égal) API 5.0
Et le fichier util FontsOverride est le même que celui de la réponse de Weston . J'ai testé dans ces téléphones:
Nexus 5 (Android 5.1 Primary Android System)
ZTE V5 (android 5.1 CM12.1)
Note XIAOMI (android 4.4 MIUI6)
HUAWEI C8850 (android 2.3.5 INCONNU)
la source
Une solution brillante peut être trouvée ici: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Étendez simplement les activités de BaseActivity et écrivez ces méthodes. Vous devriez également améliorer les polices de cache comme décrit ici: https://stackoverflow.com/a/16902532/2914140 .
Après quelques recherches, j'ai écrit du code qui fonctionne sur Samsung Galaxy Tab A (Android 5.0). Code utilisé de Weston et Roger Huang ainsi que https://stackoverflow.com/a/33236102/2914140 . Également testé sur Lenovo TAB 2 A10-70L, où cela ne fonctionne pas. J'ai inséré une police 'Comic Sans' ici afin de voir une différence.
Pour exécuter le code dans toute l'application, vous devez écrire dans une classe comme Application ce qui suit:
Créez un dossier «polices» dans «actifs» et placez-y les polices nécessaires. Une instruction simple peut être trouvée ici: https://stackoverflow.com/a/31697103/2914140 .
Le périphérique Lenovo obtient également de manière incorrecte une valeur de police. Dans la plupart des cas, il renvoie Typeface.NORMAL, parfois null. Même si un TextView est en gras (dans une disposition de fichier xml). Voir ici: TextView isBold renvoie toujours NORMAL . De cette façon, un texte sur un écran est toujours dans une police regural, pas en gras ou en italique. Je pense donc que c'est un bug d'un producteur.
la source
Travailler pour Xamarin.Android:
Classe:
Mise en œuvre de l'application:
Style:
la source
Depuis Android O, il est maintenant possible de définir directement à partir du XML et mon bug est maintenant fermé!
Voir ici pour plus de détails
TL; DR:
Vous devez d'abord ajouter vos polices au projet
Ensuite, vous ajoutez une famille de polices, comme ceci:
Enfin, vous pouvez utiliser la police dans une mise en page ou un style:
Prendre plaisir!
la source
Vous pouvez définir des polices personnalisées pour chaque mise en page une par une, avec un seul appel de fonction de chaque mise en page en passant sa vue racine. Créez d'abord une approche singelton pour accéder aux objets de police comme celui-ci
Vous pouvez définir différentes polices dans la classe ci-dessus, définissez maintenant une classe d'assistance de police qui appliquera les polices:
Dans le code ci-dessus, j'applique uniquement des polices sur textView et EditText, vous pouvez également appliquer des polices sur d'autres éléments de vue.Il vous suffit de transmettre l'ID de votre groupe de vues racine à la méthode de police d'application ci-dessus. par exemple, votre mise en page est:
Dans la disposition ci-dessus, l'ID du parent racine est "Parent principal" permet maintenant d'appliquer la police
À votre santé :)
la source
Je suggère d'étendre TextView et de toujours utiliser votre TextView personnalisé dans vos mises en page XML ou partout où vous avez besoin d'un TextView. Dans votre TextView personnalisé, remplacez
setTypeface
la source
La solution de Tom fonctionne très bien, mais ne fonctionne qu'avec TextView et EditText.
Si vous souhaitez couvrir la plupart des vues (RadioGroup, TextView, Checkbox ...), j'ai créé une méthode faisant cela:
Cette méthode récupérera le style de la vue définie en XML (gras, italique ...) et les appliquera s'ils existent.
Pour le ListView, je crée toujours un adaptateur et je définis la police dans getView.
la source
J'ai écrit une classe attribuant la police de caractères aux vues dans la hiérarchie de vues actuelle et basée sur les propriétés de police de caractères actuelles (gras, normal, vous pouvez ajouter d'autres styles si vous le souhaitez):
Maintenant, dans tous les fragments dans onViewCreated ou onCreateView, dans toutes les activités dans onCreate et dans tous les adaptateurs de vue dans getView ou newView, appelez simplement:
la source
dans l'api 26 avec build.gradle 3.0.0 et supérieur, vous pouvez créer un répertoire de polices dans res et utiliser cette ligne dans votre style
pour changer build.gradle utilisez ceci dans vos dépendances build.gradle
la source
item
seul ne définit pas la police de l'application entière. un indice?Enfin, Google a réalisé la gravité de ce problème (application d'une police personnalisée aux composants de l'interface utilisateur) et ils ont conçu une solution propre pour cela.
Tout d'abord, vous devez mettre à jour pour prendre en charge la bibliothèque 26+ (vous devrez peut-être également mettre à jour votre gradle {4.0+}, studio Android), puis vous pouvez créer un nouveau dossier de ressources appelé police. Dans ce dossier, vous pouvez mettre vos ressources de polices (.tff, ...). Ensuite, vous devez remplacer l'application par défaut et y forcer votre police personnalisée :)
Remarque: si vous souhaitez prendre en charge des appareils avec une API plus ancienne que 16, vous devez utiliser l'espace de noms d'application au lieu d'Android!
la source
Je voudrais également améliorer la réponse de weston pour l'API 21 Android 5.0.
J'ai eu le même problème sur mon Samsung s5, lors de l'utilisation de la police DEFAULT. (avec les autres polices ça marche bien)
J'ai réussi à le faire fonctionner en définissant la police ("sans" par exemple) dans les fichiers XML, pour chaque Textview ou Button
et dans MyApplication Class:
J'espère que ça aide.
la source
Cette solution ne fonctionne pas correctement dans certaines situations.
Je le prolonge donc:
FontsReplacer.java
https://gist.github.com/orwir/6df839e3527647adc2d56bfadfaad805
la source
Calligraphie fonctionne plutôt bien, mais elle ne me convient pas, car elle ne prend pas en charge différents poids (gras, italique, etc.) pour une famille de polices.
J'ai donc essayé Fontain , qui vous permet de définir des vues personnalisées et de leur appliquer des familles de polices personnalisées.
afin d'utiliser Fontain, vous devez ajouter ce qui suit à votre module d'application build.gradle:
Ensuite, au lieu d'utiliser TextView standard, vous devez utiliser FontTextView
Exemple de FontTextView avec du contenu en majuscules et en gras:
la source
la source
TextView
sPour modifier la famille de polices par défaut des TextViews, remplacez textViewStyle dans le thème de votre application.
Pour utiliser une police personnalisée dans fontFamily, utilisez les ressources de police qui se trouvent dans la bibliothèque de support.
La fonctionnalité a été ajoutée dans Android 26 mais rétroportée vers les anciennes versions via supportlib.
https://developer.android.com/guide/topics/resources/font-resource.html https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html # using-support-lib
la source
Depuis la sortie d'Android Oreo et de sa bibliothèque de support (26.0.0), vous pouvez le faire facilement. Reportez-vous à cette réponse dans une autre question.
Fondamentalement, votre style final ressemblera à ceci:
la source
J'ai trouvé le mélange de la bibliothèque de calligraphie 3 et du post de coderwall comme résultat final.
la source
Oui, il est possible de définir la police pour l'ensemble de l'application.
La façon la plus simple de procéder consiste à empaqueter la ou les polices souhaitées avec votre application.
Pour ce faire, créez simplement un fichier / dossier à la racine du projet et placez vos polices (au format TrueType ou TTF) dans les fichiers.
Vous pouvez, par exemple, créer des éléments / polices / et y placer vos fichiers TTF.
la source