Как использовать пользовательский шрифт в Android XML?

Как я могу использовать собственный шрифт, который был добавлен в папку ресурсов в моем XML? Я знаю, что мы можем использовать setTypeface() метод в Java, но мы должны делать это везде, где мы используем это TextView, Так есть ли лучший способ?

2 ответа

Решение

Лучший способ, который я нашел, прибегнув к поиску в Google, - скажем, если вы хотите использовать в TextView, мы должны расширить TextView и установить шрифт, чтобы позже мы могли использовать наш настраиваемый Textview в нашем xml. Я покажу расширенный TextView ниже

package com.vins.test;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

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

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

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

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                                               "your_font.ttf");
        setTypeface(tf);
    }

}

Мы вызываем init(), чтобы установить шрифт в каждом из конструкторов. Позже мы должны использовать это в нашем main.xml, как показано ниже.

<com.vins.test.MyTextView
    android:id="@+id/txt"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_weight="1"
    android:text="This is a text view with the font u had set in MyTextView class "
    android:textSize="30dip"
    android:textColor="#ff0000"
   >

Обновить:

Помните об утечке памяти в Android до версии 4.0, упомянутой Пандре.

Поместите ваш файл шрифта в asset\fonts\fontname

Определите три textview в вашем XML-файле, затем поместите этот код в свой класс деятельности:

public class AndroidExternalFontsActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Font path
        String fontPath = "fonts/DS-DIGIT.TTF";
        String fontPath1 = "fonts/Face Your Fears.ttf";
        String fontPath2 = "fonts/HelveticaNeue-Bold_0.otf";

        // text view label
        TextView txtGhost = (TextView) findViewById(R.id.ghost);
        TextView txtGhost1 = (TextView) findViewById(R.id.ghost1);
        TextView txtGhost2 = (TextView) findViewById(R.id.ghost2);

        // Loading Font Face
        Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
        Typeface tf1 = Typeface.createFromAsset(getAssets(), fontPath1);
        Typeface tf2 = Typeface.createFromAsset(getAssets(), fontPath2);

        // Applying font
        txtGhost.setTypeface(tf);
        txtGhost1.setTypeface(tf1);
        txtGhost2.setTypeface(tf2);
    }
}
Другие вопросы по тегам