J'essaie de définir une disposition d'interface graphique à l'aide de fichiers XML dans Android. Pour autant que je sache, il n'y a aucun moyen de spécifier que vos widgets doivent utiliser une police personnalisée (par exemple, celle que vous avez placée dans assets / font /) dans les fichiers XML et vous ne pouvez utiliser que les polices installées par le système.
Je sais que, dans le code Java, je pourrais changer la police de chaque widget manuellement en utilisant des identifiants uniques. Alternativement, je pourrais parcourir tous les widgets de Java pour effectuer ce changement, mais ce serait probablement très lent.
Quelles autres options ai-je? Existe-t-il de meilleures façons de créer des widgets qui ont une apparence personnalisée? Je ne veux pas particulièrement avoir à changer manuellement la police pour chaque nouveau widget que j'ajoute.
Réponses:
Vous pouvez étendre TextView pour définir des polices personnalisées comme je l'ai appris ici .
TextViewPlus.java:
attrs.xml: (en résolution / valeurs)
main.xml:
Vous mettriez "saxmono.ttf" dans le dossier des actifs .
MISE À JOUR 1/8/13
Il y a de sérieux problèmes de mémoire avec cette méthode. Voir le commentaire de chedabob ci-dessous.
la source
xmlns:foo="http://schemas.android.com/apk/res/com.example
J'ai 3 ans de retard pour la fête: (Cependant, cela pourrait être utile pour quelqu'un qui pourrait tomber sur ce post.
J'ai écrit une bibliothèque qui met en cache les polices de caractères et vous permet également de spécifier des polices personnalisées directement à partir de XML. Vous pouvez trouver la bibliothèque ici .
Voici à quoi ressemblerait votre mise en page XML, lorsque vous l'utiliserez.
la source
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
mais cela n'a pas fonctionné.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Cela peut être un peu tard, mais vous devez créer une classe singleton qui renvoie la police personnalisée pour éviter les fuites de mémoire.
Classe TypeFace:
TextView personnalisé:
Par xml:
Par programme:
la source
Ancienne question, mais j'aimerais bien lire cette réponse ici avant de commencer ma propre recherche d'une bonne solution. La calligraphie étend l'
android:fontFamily
attribut pour ajouter la prise en charge des polices personnalisées dans votre dossier d'actifs, comme ceci:La seule chose que vous devez faire pour l'activer est de l'attacher au contexte de l'activité que vous utilisez:
Vous pouvez également spécifier votre propre attribut personnalisé à remplacer
android:fontFamily
Il fonctionne également dans les thèmes, y compris l'AppTheme.
la source
Utilisation de DataBinding :
En XML:
le fichier de police doit être dans
assets/fonts/
la source
Si vous ne souhaitez ajouter qu'une seule police et que vous voulez moins de code à écrire, vous pouvez créer un TextView dédié pour votre police spécifique. Voir le code ci-dessous.
Dans main.xml, vous pouvez maintenant ajouter votre textView comme ceci:
la source
La meilleure façon de le faire à partir de la version préliminaire d'Android O est la suivante:
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.
3.) Ajoutez vos fichiers de polices dans le dossier de polices . La structure de dossiers ci-dessous génère R.font.dancing_script, R.font.la_la et R.font.ba_ba.
4.) Double-cliquez un fichier de polices pour prévisualiser les polices du fichier dans l'éditeur.
Ensuite, nous devons créer une famille de polices
1.) Cliquez avec le bouton droit sur le dossier de polices et accédez à Nouveau> Fichier de ressources de polices . La fenêtre Nouveau fichier de ressources apparaît.
2.) Entrez le nom du fichier, puis cliquez sur OK . Le nouveau XML de ressource de police s'ouvre dans l'éditeur.
3.) Insérez chaque fichier de police, style et attribut de poids dans l'élément de balise de police. Le code XML suivant illustre l'ajout d'attributs liés aux polices dans le XML de ressources de polices:
Ajout de polices à un TextView:
À partir de la documentation
toutes les étapes sont correctes.
la source
Étendez
TextView
-lui et donnez-lui un attribut personnalisé ou utilisez simplement l'attribut android: tag pour transmettre une chaîne de la police que vous souhaitez utiliser. Vous devrez choisir une convention et vous y tenir comme je mettrai toutes mes polices dans le dossier res / assets / fonts / afin que votre classe TextView sache où les trouver. Ensuite, dans votre constructeur, vous définissez simplement la police manuellement après le super appel.la source
La seule façon d'utiliser des polices personnalisées consiste à utiliser le code source.
N'oubliez pas qu'Android fonctionne sur des appareils avec des ressources très limitées et que les polices peuvent nécessiter une bonne quantité de RAM. Les polices Droid intégrées sont spécialement conçues et, si vous le remarquez, manquent de nombreux caractères et décorations.
la source
Je pourrais avoir une réponse simple à la question sans étendre le TextView et implémenter un long code.
Code:
Placez le fichier de police personnalisé dans le dossier des ressources comme d'habitude et essayez ceci. Ça marche pour moi. Je ne comprends tout simplement pas pourquoi Peter a donné un code aussi énorme pour cette chose simple ou il a donné sa réponse dans une ancienne version.
la source
Peut également être défini dans le xml sans créer de classes personnalisées
style.xml
activity_main.xml
Une note rapide, parce que j'oubliais toujours où mettre les polices, c'est que la police doit être à l'intérieur
assets
et ce dossier réside au même niveau queres
etsrc
, dans mon cas, c'estassets/fonts/ionicons.ttf
Mise à jour de la mise en page racine ajoutée car cette méthode doit
xmlns:app="http://schemas.android.com/apk/res-auto"
fonctionnerMise à jour 2 J'ai oublié une bibliothèque que j'ai installée auparavant appelée Calligraphy
la source
xmlns:app="http://schemas.android.com/apk/res-auto"
à votre disposition racine, vérifiez également la réponse mise à jourLa réponse de Peter est la meilleure, mais elle peut être améliorée en utilisant le style.xml d'Android pour personnaliser vos polices pour toutes les vues de texte dans votre application.
Mon code est ici
la source
Il existe deux façons de personnaliser les polices:
!!! ma police personnalisée dans assets / fonts / iran_sans.ttf
Voie 1: Réfraction Typeface.class ||| meilleur moyen
appeler FontsOverride.setDefaultFont () dans la classe étend l'application, ce code entraînera la modification de toutes les polices logicielles, même les polices Toasts
AppController.java
FontsOverride.java
Méthode 2: utilisez setTypeface
pour une vue spéciale, appelez simplement setTypeface () pour changer la police.
CTextView.java
FontUtils.java
la source
Voici un tutoriel qui vous montre comment configurer une police personnalisée comme @peter décrit: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
il tient également compte des fuites de mémoire potentielles comme http://code.google.com/p/android/issues/detail?id=9904 . Le didacticiel contient également un exemple de définition d'une police personnalisée sur un bouton.
la source
Vous pouvez créer facilement une classe textview personnalisée: -
Donc, ce que vous devez faire en premier, créez une
Custom textview
classe qui s'est étendue avecAppCompatTextView
.Maintenant, à chaque appel de vue de texte personnalisé, nous obtiendrons la valeur int de l'attribut
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Ou
Nous pouvons également obtenir getTypeface () à partir de la vue que nous avons définie dans notre xml (
android:textStyle="bold|normal|italic"
). Alors fais ce que tu veux faire.Maintenant, nous faisons
FontUtils
pour définir n'importe quelle police .ttf dans notre vue.la source
Il peut être utile de savoir qu'à partir d'Android 8.0 (niveau d'API 26), vous pouvez utiliser une police personnalisée en XML .
Vous pouvez appliquer une police personnalisée à l'ensemble de l'application de la manière suivante.
Mettez la police dans le dossier
res/font
.En l'
res/values/styles.xml
utilisant dans le thème de l'application.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
la source
Fontinator est une bibliothèque Android qui facilite l'utilisation de polices personnalisées. https://github.com/svendvd/Fontinator
la source
Vous ne pouvez pas étendre TextView pour créer un widget ou en utiliser un dans une présentation de widgets: http://developer.android.com/guide/topics/appwidgets/index.html
la source