Je sais qu'il y a déjà de bonnes réponses, mais voici une mise en œuvre qui fonctionne parfaitement.
Voici l'affichage du texte personnalisé :
package com.mycompany.myapp.widget;
/**
* Text view with a custom font.
* <p/>
* In the XML, use something like {@code customAttrs:customFont="roboto-thin"}. The list of fonts
* that are currently supported are defined in the enum {@link CustomFont}. Remember to also add
* {@code xmlns:customAttrs="http://schemas.android.com/apk/res-auto"} in the header.
*/
public class CustomFontTextView extends TextView {
private static final String sScheme =
"http://schemas.android.com/apk/res-auto";
private static final String sAttribute = "customFont";
static enum CustomFont {
ROBOTO_THIN("fonts/Roboto-Thin.ttf"),
ROBOTO_LIGHT("fonts/Roboto-Light.ttf");
private final String fileName;
CustomFont(String fileName) {
this.fileName = fileName;
}
static CustomFont fromString(String fontName) {
return CustomFont.valueOf(fontName.toUpperCase(Locale.US));
}
public Typeface asTypeface(Context context) {
return Typeface.createFromAsset(context.getAssets(), fileName);
}
}
public CustomFontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if (isInEditMode()) {
return;
} else {
final String fontName = attrs.getAttributeValue(sScheme, sAttribute);
if (fontName == null) {
throw new IllegalArgumentException("You must provide \"" + sAttribute + "\" for your text view");
} else {
final Typeface customTypeface = CustomFont.fromString(fontName).asTypeface(context);
setTypeface(customTypeface);
}
}
}
}
Voici les attributs personnalisés. Ils doivent être placés dans votre res/attrs.xml
fichier :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomFontTextView">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
Et voici comment l'utiliser. J'utiliserai une mise en page relative pour l'envelopper et je montrerai l'élément customAttr
mais il peut évidemment s'agir de n'importe quel modèle que vous avez déjà.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:customAttrs="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mycompany.myapp.widget.CustomFontTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="foobar"
customAttrs:customFont="roboto_thin" />
</RelativeLayout>
1 votes
Il y a une erreur dans votre syntaxe, cela devrait être
myTextView.setTypeface(myTypeface);
0 votes
Ce sujet est similaire à : stackoverflow.com/a/14558090/693752
0 votes
Consultez l'exemple de travail javatechig.com/2013/03/19/using-external-fonts-in-Android-view
0 votes
Application d'une police de caractères personnalisée à l'aide d'une mise en page
0 votes
Vous disposez ici d'un moyen efficace de modifier la police de caractères pour l'ensemble de l'application : stackoverflow.com/questions/18847531/
0 votes
Après avoir essayé la plupart des solutions décrites dans ce fil de discussion, j'ai trouvé par hasard Calligraphy - a library de Christopher Jenkins ( github.com/chrisjenx/Calligraphie ) qui vous permet d'ajouter facilement des polices personnalisées à votre application. Les avantages de cette librairie par rapport aux approches proposées ici sont les suivants : 1. vous n'avez pas besoin d'introduire votre propre composant TextView, vous utilisez le TextView intégré 2. vous pouvez facilement inclure la librairie en utilisant gradle 3. La bibliothèque ne limite pas votre choix de polices, il vous suffit d'ajouter vos polices préférées dans le répertoire assets.