Est-il possible de définir une police personnalisée dans chaque contrôle de l'application? Et pas nécessairement runtime? (c'est-à-dire à partir de xml si possible ou une seule fois pour toute l'application dans un fichier JAVA)
Je peux définir la police pour un contrôle à partir de ce code.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
Et le problème avec ce code est qu'il devrait être appelé pour chaque contrôle. Et je veux appeler cette méthode ou toute autre méthode similaire une fois, ou si possible définir la propriété en xml. C'est possible?
android
fonts
textview
android-fonts
Prasham
la source
la source
VIEW
au lieu d'écrire uncustom text view
et uncustom button view
séparément? Mon exigence concerne chaque contrôle, et la vue texte n'était qu'un exemple. Désolé, j'ai oublié de le mentionner .. :-(Réponses:
EDIT : Cela fait donc un moment, et j'aimerais ajouter ce que je pense être la meilleure façon de le faire, et par XML pas moins!
Donc, tout d'abord, vous allez vouloir créer une nouvelle classe qui remplace la vue que vous souhaitez personnaliser. (par exemple, vous voulez un bouton avec une police de caractères personnalisée? Étendre
Button
). Faisons un exemple:Maintenant, si vous n'en avez pas, ajoutez un document XML sous
res/values/attrs.xml
et ajoutez:D'accord, donc avec cela à l'écart, revenons à la
parseAttributes()
méthode précédente:Maintenant, vous êtes prêt. Vous pouvez ajouter plus d'attributs pour à peu près tout (vous pouvez en ajouter un autre pour typefaceStyle - gras, italique, etc.) mais voyons maintenant comment l'utiliser:
La
xmlns:custom
ligne peut vraiment être n'importe quoi, mais la convention est celle illustrée ci-dessus. Ce qui compte, c'est qu'il soit unique, et c'est pourquoi le nom du package est utilisé. Maintenant, vous utilisez simplement lecustom:
préfixe pour vos attributs et leandroid:
préfixe pour les attributs Android.Une dernière chose: si vous voulez utiliser ceci dans un style (
res/values/styles.xml
), vous ne devez pas ajouter laxmlns:custom
ligne. Faites simplement référence au nom de l'attribut sans préfixe:Utilisation d'une police personnalisée sous Android
Cela devrait aider. Fondamentalement, il n'y a aucun moyen de le faire en XML, et pour autant que je sache, pas de moyen plus simple de le faire dans le code. Vous pouvez toujours avoir une méthode setLayoutFont () qui crée la police une fois, puis exécute setTypeface () pour chacune. Il vous suffit de le mettre à jour chaque fois que vous ajoutez un nouvel élément à une mise en page. Quelque chose comme ci-dessous:
EDIT : Donc je me suis mis à implémenter moi-même quelque chose comme ça, et comment j'ai fini par le faire était de créer une fonction comme celle-ci:
Ensuite, utilisez simplement cette méthode de onCreate () et transmettez tous les TextViews que vous souhaitez mettre à jour:
MODIFIER 9/5/12:
Donc, comme cela continue de recevoir des vues et des votes, j'aimerais ajouter une méthode bien meilleure et plus complète:
Si vous lui passez la racine de votre mise en page, il recherchera récursivement
TextView
ouButton
vues (ou toute autre que vous ajoutez à cette instruction if) dans cette mise en page, et définira la police sans que vous ayez à les spécifier par ID. Cela suppose bien sûr que vous souhaitez définir la police pour chaque vue.la source
recycle
leTypedArray values
?xmlns:custom="http://schemas.android.com/apk/res-auto"
Il existe un moyen assez simple de le faire via XML. Il vous suffit de créer votre propre widget qui étend TextView.
Tout d'abord, créez un fichier dans res / values / attrs.xml avec le contenu suivant:
Après cela, créez votre widget personnalisé:
Comme vous pouvez le voir, le code ci-dessus lira une police dans le dossier assets /. Pour cet exemple, je suppose qu'il existe un fichier appelé "custom.ttf" dans le dossier des actifs. Enfin, utilisez le widget dans les XML:
Remarque: vous ne pourrez pas voir votre police personnalisée dans l'éditeur de mise en page d'Eclipse. C'est pourquoi j'ai mis le
isInEditMode()
chèque. Mais si vous exécutez votre application, la police personnalisée fonctionnera comme un charme.J'espère que ça aide!
la source
TextView
classe; mis letypeface
dedans et utilisé le contrôle personnalisé dans la mise en page comme nous le faisons normalement et cela a fonctionné pour moi ... C'était simple, cependant, que celui ci-dessus ...Exemple de TextView avec la police roboto:
attr.xml
RobotoTextView.java:
Exemple d'utilisation:
Ressources: polices Roboto & Noto
la source
Il est trop tard mais cela aide l'autre,
j'ai créé CustomTextView qui a un attribut appelé typeFace et s'occupe du problème de fuite de mémoire avec le chargement de la police sans mise en cache
Première
Fonts
classe qui charge les polices des actifs pour une seule foisalors vous devez ajouter un attribut personnalisé dans le fichier attrs.xml ajoutez ceci
puis classe personnalisée
et enfin ajouter la vue texte
et vous pouvez modifier la police de manière progressive avec la méthode setTypeFace,
vous pouvez également déplacer l'espace de noms personnalisé vers votre mise en page parent si vous souhaitez en utiliser plusieurs à partir de cette vue
Bon codage :)
la source
La méthode ci-dessous, appelée onCreate () et transmise à votre ViewGroup le plus à l'extérieur, fonctionnera pour tout sauf le texte créé dynamiquement (c'est-à-dire les listes dynamiques, les alertes, etc.). Un moyen simple d'obtenir le ViewGroup le plus externe consiste à utiliser getRootView sur l'une de vos vues.
Cela devrait également fonctionner pour le contenu dynamique, il vous suffit de l'appeler, en passant ce que vous avez créé, juste après l'avoir créé (je ne l'ai pas testé, cependant).
Pour économiser de la mémoire, vous voudrez probablement faire de la police une variable statique, plutôt que d'en créer une nouvelle chaque fois que la boucle s'exécute comme je l'ai fait ici.
la source
Si vous recherchez une solution de programmation plus générale, j'ai créé une classe statique qui peut être utilisée pour définir la police de caractères d'une vue entière (interface utilisateur d'activité). Notez que je travaille avec Mono (C #) mais vous pouvez l'implémenter facilement en utilisant Java.
Vous pouvez transmettre à cette classe une mise en page ou une vue spécifique que vous souhaitez personnaliser. Si vous voulez être super efficace, vous pouvez l'implémenter en utilisant le modèle Singleton.
Dans votre activité, vous devrez créer un objet Typeface. Je crée le mien dans OnCreate () en utilisant un fichier .ttf placé dans mon répertoire Resources / Assets /. Assurez-vous que le fichier est marqué comme un élément Android dans ses propriétés.
la source
Malheureusement, Android ne fournit pas le moyen rapide, simple et propre que vous recherchez pour modifier la police de l'ensemble de votre application. Mais récemment, j'ai examiné cette question et créé des outils qui vous permettent de changer la police sans aucun codage (vous pouvez tout faire via xml, les styles et même les apparences de texte). Ils sont basés sur des solutions similaires comme vous le voyez dans les autres réponses ici, mais permettent une plus grande flexibilité. Vous pouvez tout lire sur ce blog et voir le projet github ici .
Voici un exemple d'application de ces outils. Mettez tous vos fichiers de polices au format
assets/fonts/
. Ensuite, déclarez ces polices dans un fichier xml (par exempleres/xml/fonts.xml
) et chargez ce fichier au début de votre application avecTypefaceManager.initialize(this, R.xml.fonts);
(par exemple, dans le onCreate de votre classe Application). Le fichier xml ressemble à ceci:Vous pouvez maintenant utiliser ces polices dans votre style ou xml (à condition d'utiliser les outils que j'ai mentionnés ci-dessus), en utilisant l'élément d'interface utilisateur personnalisé
com.innovattic.font.FontTextView
dans votre mise en page xml. Ci-dessous, vous pouvez voir comment appliquer une police à tous les textes de l'ensemble de votre application, simplement en modifiantres/values/styles.xml
:Avec l'accompagnement
res/layout/layout.xml
:N'oubliez pas d'appliquer le thème dans votre manifeste Android.
la source
Je voudrais ajouter une note à la grande solution de
leocadiotine
. C'est parfait, mais lorsque vous utilisez cette vue de texte personnalisée, l'application ralentit de nombreuses fois, car elle doit accéder aux ressources chaque fois qu'une vue de texte est créée. Je suggère d'utiliser quelque chose comme leView Holder pattern
dans leAdapters
, j'ai écrit un exemple:De cette manière, l'application accède aux actifs une seule fois par actif et les garde en mémoire pour d'autres besoins.
la source
Je ne sais pas si cela change l'ensemble de l'application, mais j'ai réussi à changer certains composants qui ne pourraient autrement pas être modifiés en faisant ceci:
la source
J'ai trouvé des informations étape par étape sur ce lien, lien: https://github.com/jaydipumaretiya/CustomTypeface/
Il existe de nombreuses façons d'utiliser correctement la police dans Android, vous devez placer votre fichier de police dans le dossier des actifs directement sous votre main et pouvez l'utiliser au moment de l'exécution.
Un autre moyen le plus simple consiste à utiliser la bibliothèque par défaut pour définir la police dans votre fichier xml. J'ai préféré cette bibliothèque de polices de caractères personnalisée pour définir la police sur TextView, EditText, Button, CheckBox, RadioButton et AutoCompleteTextView et d'autres wedget sous Android.
la source
Android 8.0 (niveau d'API 26) introduit une nouvelle fonctionnalité, les polices en XML.Vous pouvez créer un fichier fontfamily et le définir dans styles.xml.
Source: polices en XML
la source