Android自定义字体

作者: 淡淡_孩子气 | 来源:发表于2019-02-08 21:37 被阅读11次

在main文件夹下,新建assets/fonts文件,添加.otf文件

image.png

字体工具类

import android.app.Application;
import android.graphics.Typeface;

/**
 * 字体工具类
 * author:wiki on 2018/11/9
 * email:zhengweiqunemail@qq.com
 */
public class CustomFontManager {
    private static CustomFontManager singleton;
    private Typeface lightFont;
    private Typeface boldFont;

    private CustomFontManager() {

    }

    public void init(final Application context) {
        //读取字体文件
        this.lightFont = Typeface.createFromAsset(context.getAssets(), "fonts/SFCompactText-Light.otf");
        this.boldFont = Typeface.createFromAsset(context.getAssets(), "fonts/SFCompactText-Semibold.otf");
    }

    public synchronized static CustomFontManager getInstance() {
        if (singleton == null) {
            singleton = new CustomFontManager();
        }
        return singleton;
    }

    public Typeface getLightFont() {
        return this.lightFont;
    }

    public Typeface getBoldFont() {
        return this.boldFont;
    }
}

自定义字体基类

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;

/**
 * 自定义字体类型 基类
 * author:wiki on 2018/11/9
 * email:zhengweiqunemail@qq.com
 */
public abstract class BaseCustomTextView extends AppCompatTextView {

    public BaseCustomTextView(Context context) {
        super(context);
        setFont();
    }

    public BaseCustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFont();
    }

    public BaseCustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setFont();
    }

    protected abstract void setFont();
}

字体类

import android.content.Context;
import android.util.AttributeSet;

import com.sugrsugr.ivyapp.sugrsmartivy.util.CustomFontManager;

/**
 * SFCompactText-Semibold 字体
 * author:wiki on 2018/11/9
 * email:zhengweiqunemail@qq.com
 */
public class CustomBoldTextView extends BaseCustomTextView {

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

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

    public CustomBoldTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void setFont() {
        setTypeface(CustomFontManager.getInstance().getBoldFont());
    }
}

AppManager中初始化字体

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.multidex.MultiDexApplication;

import com.sugrsugr.ivyapp.sugrsmartivy.util.CustomFontManager;

/**
 * 初始化资源
 * author:wiki on 2018/11/9
 * email:zhengweiqunemail@qq.com
 */
public final class AppManager extends MultiDexApplication {

    private static AppManager instance;
    
    public static AppManager getInstance() {
        return instance;
    }

    public static Context getContext() {
        return instance.getApplicationContext();
    }


    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        //初始化字体类
        CustomFontManager.getInstance().init(this);
    }

    /**
     * 获取本地软件版本号
     */
    public static int getLocalVersion(Context ctx) {
        int localVersion = 0;
        try {
            PackageInfo packageInfo = ctx.getApplicationContext()
                    .getPackageManager()
                    .getPackageInfo(ctx.getPackageName(), 0);
            localVersion = packageInfo.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return localVersion;
    }

    /**
     * 获取本地软件版本号名称
     */
    public static String getLocalVersionName(Context ctx) {
        String localVersion = "";
        try {
            PackageInfo packageInfo = ctx.getApplicationContext()
                    .getPackageManager()
                    .getPackageInfo(ctx.getPackageName(), 0);
            localVersion = packageInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return localVersion;
    }

}

布局文件中使用

<com.sugrsugr.ivyapp.sugrsmartivy.widget.CustomBoldTextView
            android:layout_marginTop="27dp"
            android:layout_marginBottom="16dp"
            android:textColor="@color/green_8CC63F"
            android:textSize="25sp"
            tools:text="Hi" />

相关文章

  • android自定义字体

    Android O通过字体资源支持自定义字体,支持.otf(OpenType)和.ttf(TrueType)字体格...

  • Android自定义字体

    文章目的:快速入门Android中自定义各种字体! 前言:我们都知道,Android中默认的字体是黑体,而大多数a...

  • Android自定义字体设置

    Android自定义字体设置 1.typeface、fontFamily、textStyle介绍 1.typefa...

  • Android 自定义字体

    说明 在一些应用中,有改变字体,或者某些页面有特殊字体要求时,Android自身的字体满足不了时,需要自定义字体,...

  • Android自定义字体

    Android 自定义字体 1. Android默认方法 为每个view单独设置Typeface. 这种方法可以扩...

  • Android上的自定义字体 - 通过XML进行动态字体选择

    前言 这是我们系列自定义字体在Android上的第2篇文章。在之前,我们已经看到如何使用自定义字体并将不同的样式应...

  • Android 自定义字体方案

    在应用中需要配置不同的字体,而 Android 只能在 xml 中配置系统默认提供的四种字体,需要自定义的字体都需...

  • Android APP支持自定义字体

    情景:需要为整个应用替换自定义字体。 Android对于文字的字体设置主要是通过以下两个对象 FontFamily...

  • Android 设置字体

    吐槽 首先,来点吐槽。在Android O 之前设置字体是如此之…… 缺点:自定义字体只能通过动态代码设置; 每次...

  • 十九、Expo 使用自定义字体

    使用自定义字体 iOS和Android都有自己的平台字体集,但如果你想在你的应用中注入更多的品牌个性,那么选择好的...

网友评论

    本文标题:Android自定义字体

    本文链接:https://www.haomeiwen.com/subject/uobosqtx.html