En utilisant une mesure de police dans Android
Je veux utiliser une police personnalisée pour mon application android qui je suis en train de créer.
Je peux individuellement changer la police de caractères de chaque objet à partir de Code, mais j'ai des centaines d'entre eux.
Donc,
- Est-il un moyen de le faire à partir de l'XML? [Réglage personnalisé de police]
- Est-il un moyen de le faire à partir de code dans un seul endroit, pour dire que l'ensemble de l'application et tous les composants doivent utiliser la police de caractères personnalisée à la place de celui par défaut?
- stackoverflow.com/questions/5541058/... Regardez ce post, j'ai posté le code complet ici sur cette question
- Vous pouvez utiliser des variables statiques sur votre activité principale pour contenir des références à des polices incorporées. Que serait provoquer une persistante de polices qui ne sont pas ramassés par GC.
- Méthode de fabrique. Ou une méthode qui prend votre point de vue et définit toutes les polices et les caractères des paramètres.
- Nouvelle bibliothèque de prise en charge 26 maintenant vous permet d'utiliser des polices de caractères au format XML. Voici comment il Fontes en XML
Vous devez vous connecter pour publier un commentaire.
Non, désolé. Vous ne pouvez spécifier que le built-in de polices de caractères dans le format XML.Pas que je sache.Il y a une variété d'options pour ces aujourd'hui:
Des ressources de police et les backports dans le SDK Android, si vous utilisez
appcompat
Les bibliothèques de tiers pour les personnes n'utilisant pas
appcompat
, mais pas tous vous permettre de définir la police dans la mise en page des ressourcesOui C'est possible.
Vous devez créer une vue personnalisée qui s'étend de la vue du texte.
Dans
attrs.xml
dansvalues
dossier:Dans
main.xml
:Dans
MyTextView.java
:TextView
. Il faudra personnalisée sous-classes pour chaque classe de widget qui hérite deTextView
où la même capacité est souhaitée.attrs.xml
styleable au lieu d'une chaîne, puis dans leTextView
sous-classe lien avec la statique instancié polices.Je n'ai de plus en plus "brute force" manière qui ne nécessite pas de modifications à la configuration xml ou d'Activités.
Testé sur la version Android 2.1 à 4.4.
Exécuter ce à l'application de démarrage, dans votre classe d'Application:
Pour un exemple plus complet, voir http://github.com/perchrh/FontOverrideExample
code
<style name="AppTheme" parent="AppBaseTheme"> <item name="android:police de caractères">monospace</item> </style>code
il fonctionne, mais pas pour le gras. j'ai ajouté ce code dans une classe qui étend le champ d'Application. est-ce la bonne place? @P-chanBien que je suis upvoting Manish la réponse la plus rapide et la plus ciblée de la méthode, j'ai vu aussi naïf solutions, qui vient de parcourir récursivement un point de vue de la hiérarchie et de la mise à jour de l'ensemble des éléments " polices de caractères à tour de rôle. Quelque chose comme ceci:
Vous devez appeler cette fonction sur votre point de vue à la fois après le gonflage de mise en page et de votre Activité
onContentChanged()
méthodes.J'ai été en mesure de le faire d'une manière centralisée, voici le résultat:
J'ai suivantes
Activity
et je l'étends à partir de ça, si j'ai besoin de polices personnalisées:Mais si je suis à l'aide d'une activité de support package par exemple
FragmentActivity
puis-je utiliser ceActivity
:Je n'ai pas testé ce code avec
Fragment
s encore, mais j'espère que cela va fonctionner.Mon
FontUtils
est simple qui résout également le pré-ICS problème mentionné ici https://code.google.com/p/android/issues/detail?id=9904:Hey j'ai aussi besoin de 2 polices différentes dans mon application pour différents widgeds!
J'utilise de cette façon:
Dans ma classe d'Application-je créer une méthode statique:
La Chaîne de caractères représente le xyz.ttf dans le dossier actif. (j'ai créé une des Constantes de la Classe)
Maintenant, vous pouvez l'utiliser partout dans votre application:
Le seul problème est, vous avez besoin de cela pour chaque widget où vous souhaitez utiliser la Police!
Mais je pense que c'est le meilleur moyen.
À l'aide de pospi de suggestion et de travailler avec le " tag " de la propriété comme Richard fait, j'ai créé une classe personnalisée qui charge mes polices personnalisées et les applique à des vues en fonction de leurs tags.
Donc, fondamentalement, au lieu de définir la Police de caractères dans l'attribut android:fontFamily vous utilisez android:tag attritube et la placer à l'une des enums.
Dans votre Activité ou de Fragment vous suffit d'appeler
J'ai trouvé une solution sympa sur le blog de Lisa Wray. Avec la nouvelle liaison de données, il est possible de définir la police dans vos fichiers XML.
En XML:
Je pense qu'il y a peut être un plus moyen de le faire. La classe suivante permettra de définir un type personnalisé du visage pour tous vos composants de votre application (avec un réglage par classe).
Les implémentations par défaut de LayoutInflater ne prennent pas en charge la spécification de la police de caractères à partir de xml. J'ai cependant vu qu'il fait en xml en fournissant une usine sur mesure pour le LayoutInflater qui va analyser de tels attributs de la balise xml.
La structure de base serait comme ça.
Cet article offre un plus en profondeur l'explication de ces mécanismes et de la façon dont l'auteur tente de donner xml de mise en page de support pour les caractères de cette façon. Le code pour l'auteur de la mise en œuvre peut être trouvé ici.
Définition d'une police personnalisée à un régulière ProgressDialog/AlertDialog:
Oui c'est possible en remplaçant la valeur par défaut des caractères.
J'ai suivi cette solution et cela a fonctionné comme un charme pour tous les TextViews et ActionBar du texte avec un seul changement.
styles.xml
Au lieu de themes.xml comme mentionné dans le lien ci-dessus, j'ai indiqué que la police par défaut pour remplacer dans mon styles.xml dans mon application par défaut du thème de la balise. La valeur par défaut des caractères qui peuvent être écrasés sont serif, sans, monospace et normal.
TypefaceUtil.java
D'abord, je n'ai pas connaître les types de caractères à être écrasés sont fixes et un ensemble de valeurs définies, mais finalement, il m'a aidé à comprendre comment Android traite avec les polices et polices de caractères et leurs valeurs par défaut, qui est un autre point bien sûr.
Je ne sais pas si ça change de l'ensemble de l'application, mais j'ai réussi à changer certains composants qui ne peuvent pas être modifiées en faisant ceci:
J'aime pospi de la suggestion. Pourquoi ne pas aller tous d'utiliser les balises de la propriété d'un point de vue (que vous pouvez spécifier dans le fichier XML - android:tag") pour spécifier les autres style que vous ne pouvez pas le faire en XML. J'aime JSON alors j'aimerais utiliser une chaîne JSON pour spécifier une clé/valeur de consigne. Cette classe fait le travail et appeler à l'
Style.setContentView(this, [resource id])
dans votre activité.Évidemment, vous voulez faire plus que simplement le caractère de rendre l'utilisation de JSON en vaut la peine.
Un des avantages du " tag " la propriété, c'est que vous pouvez le mettre sur un style de base qui vous l'utiliser comme un thème et ainsi s'appliquer à l'ensemble de vos points de vue automatiquement. EDIT: ceci provoque un crash lors de l'inflation sur Android 4.0.3. Vous pouvez toujours utiliser un style et de l'appliquer à un texte vues individuellement.
Une chose que vous verrez dans le code - certains points de vue ont une balise, sans avoir été explicitement définie paradoxalement, c'est la chaîne de caractères "Αποκοπή" - qui est "coupée" en grec, selon google translate! Ce que l'enfer...?
@majinboo la réponse est révisé pour la performance et la gestion de la mémoire. Plus d'une police besoin d'une Activité liée pouvez utiliser cette classe de la Police en donnant le constructeur lui-même en tant que paramètre.
Révisé Polices de classe est comme ci-dessous:
De travail pour les Xamarin.Android:
Classe:
Application De Mise En Œuvre:
Style:
Il ressemble à l'aide de polices personnalisées a été rendue facile avec Android O, vous pouvez en principe utiliser xml pour atteindre cet objectif. J'ai joint un lien pour Android les documents officiels de référence, et j'espère que cela va aider les gens qui ont encore besoin de cette solution. Travailler avec des polices personnalisées dans Android
Il peut être utile de savoir qu'à partir d'Android 8.0 API (niveau 26) vous pouvez utiliser une police personnalisée en XML.
Tout simplement, vous pouvez le faire de la manière suivante.
Mettre la police dans le dossier
res/font
.Le choix de l'utiliser dans l'attribut d'un widget
<Button android:fontFamily="@font/myfont"/>
ou le mettre dans
res/values/styles.xml
et l'utiliser comme un style
Utiliser "fontPath" attribut directement dans le fichier xml.
pour une utilisation dans style.xml
<item name="fontPath">polices/ProximaNovaSemibold.ttf</item>
pour une utilisation en direct fichier de mise en page
fontPath="fonts/ProximaNovaBold.ttf"
(Note : Pas besoin d'utiliser app/android attribut en préfixe)
Tout à fait possible.
De nombreuses façons de le faire.
Le moyen le plus rapide, créer condition avec un try - catch méthode..
tentez votre certain style de police condition, de capture de l'erreur, et de définir les autres style de police.