2011-01-21 2 views
1

Я пытаюсь реализовать пользовательское текстовое представление, которое использует мой собственный собственный шрифт.пользовательский текстовый просмотр с использованием настраиваемого шрифта

Есть ли способ установить шрифт перед выполнением Super.onDraw()?

Чтобы заменить обычный шрифт на пользовательский шрифт, который я хочу использовать.

Что-то вроде:

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

Я знаю, что приведенный выше код не будет работать.

Или у меня нет другого выбора, кроме как использовать drawText() для этого?

ответ

1

О, мой плохой, на самом деле он меняет шрифт.

Просто, чтобы он не отображался в предварительном просмотре на Eclipse, но он отображается на эмуляторе.

Проблема решена.

9

Это очень плохая практика создания нового объекта Typeface при каждом вызове метода onDraw. Такие вещи, как настройка шрифта, должны выполняться в конструкторе класса, но не при каждом обращении к вашему представлению.

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); 
} 
} 

фрагмент кода создает пользовательский TextView и при создании TextView он установлен пользовательский шрифт.
Когда вы пытаетесь программно установить внешний вид текста, пользовательский шрифт сбрасывается. Следовательно, вы можете переопределить метод setTextAppearance и снова установить пользовательский шрифт.

Смежные вопросы