2011-01-21 5 views
1

J'essaie d'implémenter un textview personnalisé qui utilise ma propre police personnalisée.textview personnalisé en utilisant la police personnalisée

est-il un moyen de définir la police de caractères avant de faire un Super.onDraw()?

Afin de remplacer la police habituelle par la police personnalisée que je veux utiliser.

Quelque chose comme:

protected void onDraw(Canvas canvas) 
{ 
    Typeface font1 = Typeface.createFromAsset(context.getAssets(), "fonts/myfonts.ttf"); 
    this.setTypeface(font1); 
    this.setTextSize(18); 
    super.onDraw(canvas); 
} 

Je sais que le code ci-dessus ne fonctionnera pas.

Ou est-ce que je n'ai pas d'autre choix que d'utiliser drawText() pour le faire?

Répondre

1

Oh mon dieu, ça change la police. Juste qu'il n'apparaissait pas sur l'aperçu sur Eclipse mais il apparaît sur l'émulateur.

Problème résolu.

9

C'est une très mauvaise habitude de créer un nouvel objet Typeface à chaque fois que votre méthode onDraw est appelée. Des choses telles que la configuration des polices doivent être effectuées dans le constructeur de la classe mais pas à chaque fois que votre vue est dessinée.

0
public class CustomTextView extends TextView { 

public CustomTextView(Context context, AttributeSet attributes) { 
    super(context, attributes); 
    applyCustomFont(context); 
} 

private void applyCustomFont(Context context) { 
    TypeFace customTypeFace = Typeface.createFromAsset(context.getAssets(), "custom_font_name"); 
    setTypeface(customTypeFace); 
} 

@Override 
public void setTextAppearance(Context context, int resid) { 
    super.setTextAppearance(context, resid); 
    applyCustomFont(context); 
} 
} 

L'extrait de code crée une coutume TextView et lors de la création du textview il mis la police personnalisée.
Lorsque vous essayez de définir par programme l'apparence du texte, la police personnalisée est réinitialisée. Vous pouvez donc remplacer la méthode setTextAppearance et redéfinir la police personnalisée.

Questions connexes