如何在android中的textview上使用自定义字体

如何在android中的textview上使用自定义字体,android,Android,为了实现自定义字体,我在这里看到了几个不同的例子,我在一个抽象类中使用自定义字体,这个抽象类在整个应用程序中都使用。我无法更改字体。 提前感谢。请尝试使用此选项以获得资产的自定义字体 // Font path String fontPath = "fonts/Face Your Fears.ttf"; // text view label TextView txtGhost = (TextView) findViewById(R.id.ghost

为了实现自定义字体,我在这里看到了几个不同的例子,我在一个抽象类中使用自定义字体,这个抽象类在整个应用程序中都使用。我无法更改字体。
提前感谢。

请尝试使用此选项以获得资产的自定义字体

// Font path
        String fontPath = "fonts/Face Your Fears.ttf";

        // text view label
        TextView txtGhost = (TextView) findViewById(R.id.ghost);

        // Loading Font Face
        Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);

        // Applying font
        txtGhost.setTypeface(tf);
有关更多信息,请查看此, 你可以这样做。 您必须将.tff文件添加到资产文件夹中

ArialMTBoldRegularTextView.java:

public final class ArialMTBoldRegularTextView extends CustomTextView {

    public static final String FONT_PATH = "arial-rounded-mt-bold.ttf";

    public ArialMTBoldRegularTextView(Context context) {
        super(context);
        setFont(FONT_PATH);
    }

    public ArialMTBoldRegularTextView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        setFont(FONT_PATH);
    }

    public ArialMTBoldRegularTextView(Context context, AttributeSet attributeSet, int defStyleAttr) {
        super(context, attributeSet, defStyleAttr);
        setFont(FONT_PATH);
    }

    public void setFont(String fontPath) {
        changeFont(this, fontPath);
    }



public static void changeFont(final CompoundButton button, final String fontPath) {
    Typeface typeface = Typeface.createFromAsset(button.getContext().getAssets(), fontPath);
    button.setTypeface(typeface);
}
}
CustomTextView.java

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
        super(context);
    }

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

    public CustomTextView(Context context, AttributeSet attributeSet, int defStyleAttr) {
        super(context, attributeSet, defStyleAttr);
    }

    public Typeface getFont(final Context context, final String fontPath) {
        return Typeface.createFromAsset(context.getAssets(), fontPath);
    }

    public void changeFont(final TextView textView, final String fontPath) {
        Typeface typeface = Typeface.createFromAsset(textView.getContext().getAssets(), fontPath);
        textView.setTypeface(typeface);
    }

    public void changeFont(final CompoundButton button, final String fontPath) {
        Typeface typeface = Typeface.createFromAsset(button.getContext().getAssets(), fontPath);
        button.setTypeface(typeface);
    }
}
以及xml格式的fater:

<packagename.views.ArialMTBoldRegularTextView
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:gravity="center"
            android:text="Pseudo"/>

创建自定义类,如下所示

public class CustomTextView extends TextView {

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

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

    }

    public CustomTextView(Context context) {
        super(context);
        init(null);
    }

    private void init(AttributeSet attrs) {
        if (attrs!=null) {
             TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextView);
             String fontName = a.getString(R.styleable.CustomTextView_fontName);
             if (fontName!=null) {
                 Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/"+fontName);
                 setTypeface(myTypeface);
             }
             a.recycle();
        }
    }

}
并在“资源”>“字体”文件夹中添加字体

在attrs.xml中添加以下内容

<declare-styleable name="CustomTextView">
        <attr name="fontName" format="string" />
    </declare-styleable>

使用

<com.abc.cusomclass.CustomTextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    app:fontName="/*name of your font from assets/font folder*/"/>


现在android支持库26支持直接从XML中使用字体。有关详细信息,请参阅。

更好的方法是使用如下自定义字体创建自定义文本视图:

Java

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


public class RegularProximaTextView extends TextView {
   public static Typeface FONT_NAME;


   public RegularProximaTextView(Context context) {
    super(context);
    if(FONT_NAME == null) FONT_NAME = 
  Typeface.createFromAsset(context.getAssets(), "fonts/Mark Simonson - 
  Proxima Nova Regular.otf");
    this.setTypeface(FONT_NAME);
  }
  public RegularProximaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
     if(FONT_NAME == null) FONT_NAME = 
    Typeface.createFromAsset(context.getAssets(), "fonts/Mark Simonson - 
      Proxima 
      Nova Regular.otf");
      this.setTypeface(FONT_NAME);
   }
  public RegularProximaTextView(Context context, AttributeSet attrs, int 
  defStyle) {
    super(context, attrs, defStyle);
    if(FONT_NAME == null) FONT_NAME = 
       Typeface.createFromAsset(context.getAssets(), "fonts/Mark Simonson - 
       Proxima Nova Regular.otf");
       this.setTypeface(FONT_NAME);
    }
 }
XML

  <?xml version="1.0" encoding="utf-8"?>
  <android.support.design.widget.CoordinatorLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/activity_login"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitsSystemWindows="true"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true"
  android:background="@color/colorGreyBar"
 >


   <com.tracer.joblogic.v2.helpers.custom_ui.RegularProximaTextView
            android:id="@+id/tvTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:textColor="@color/colorButtonRed"
            android:text="Some text"
            android:textSize="8sp"
            />
 </android.support.design.widget.CoordinatorLayout>

检查