Android - Как настроить собственный шрифт для всего приложения

Возможный дубликат:
Можно ли установить шрифт для всего приложения?

Мне нужно установить собственный шрифт (формат .ttf) для всего приложения, как я могу это сделать? Из Manifest или XML будет лучшим вариантом, если это возможно.

Ответ 1

EDIT Сентябрь 2014:

Для тех, кто все еще видит этот старый ужасный ответ, настоящий, хороший ответ здесь:

fooobar.com/questions/14347/...


OLD:

Лучше всего будет:

Настроить шрифты Android

Итак,

    TextView text = (TextView) findViewById(R.id.custom_font);
    Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
    text.setTypeface(font);

С вашим .ttf в корне папки "assets".

Ответ 2

Вы можете сделать это так. Создайте собственное текстовое представление и используйте его везде

public class MyTextView extends android.widget.TextView
{

    public MyTextView(Context context)
    {
        this(context, null);
    }

    public MyTextView(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs);
        if (this.isInEditMode()) return ;

        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle);
        final String customFont = a.getString(R.styleable.SomeStyle_font);

        //Build a custom typeface-cache here!
        this.setTypeface(
            Typeface.createFromAsset(context.getAssets(), customFont)
        );  
    }
}

Добавьте это в attrs.xml

<declare-styleable name="SomeStyle">
    <attr name="font" format="string" />
</declare-styleable>

Затем в вашей теме сделайте следующее: Это позволит убедиться, что все текстовые эффекты будут использовать стиль MyTextView

<item name="android:textViewStyle">@style/MyTextView</item>

И теперь мы можем определить ваш собственный шрифт, используя свой собственный атрибут в этом стиле.

<style name="MyTextView" parent="@android:style/Widget.TextView">
    <item name="font">MyPathToFontInAssets.ttf</item>
</style>

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

ВАЖНО: Типизированные шрифты не кэшируются, поэтому, если вы планируете использовать этот код, вы также должны создать собственный кэш типаface, чтобы вы могли повторно использовать пользовательский шрифт для всех текстовых просмотров. Это значительно ускорит применение!

ОБНОВЛЕНИЕ: Как говорил Амир, это почти то же самое, что Пользовательские шрифты и макеты XML (Android), но я также использую android стиль, чтобы автоматически использовать его во всех текстовых изображениях в приложении.

Ответ 3

Сгладить подкласс TextView и использовать его везде

    public class RobotoTextView extends TextView {

    public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public RobotoTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public RobotoTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
            setTypeface(tf);
        }
    }

}

Использование

<com.test.RobotoTextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

в java-коде вы можете отправить его в TextView

Ответ 4

TextView tv=(TextView)findViewById(R.id.custom);
    Typeface face=Typeface.createFromAsset(getAssets(),
                                          "fonts/Verdana.ttf");

    tv.setTypeface(face);

поместите файл шрифта в папку шрифтов в /res/

Как мой ответ, если это полезно...

Ответ 5

Вы можете расширить TextView, как предложено здесь, и установить на нем свой шрифт, а затем использовать его в целом приложении.