100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android 为应用或Textview设置自定义字体 主流字体包

Android 为应用或Textview设置自定义字体 主流字体包

时间:2019-12-12 18:09:51

相关推荐

Android 为应用或Textview设置自定义字体 主流字体包

文章目录

前言一、assets是什么?二、APP全局字体2.1.引入库2.2.在Application中初始化calligraphy2.3.让指定的Activity配置自定义字体2.3.1 Android Q 以及 Android X 开发环境报错三、单个TextView设置字体3.1 使用Typeface + .ttf实现3.2 使用SDK自带字体3.2.1 通过xml实现3.2.2 通过Java逻辑代码实现3.3 使用RoBoto在xml设置字体3.3.1 xml中使用 android:fontFamily3.3.2 fontFamily参数属性四、优秀的个性化字体功能框架4.1 通过Spannables设置文本样式4.2 使关键词带有可点击的下划线TextView4.3 用手势缩放字体大小4.4 用颜色标记一些短语

前言

本文介绍Android实现全局设置自定义字体和局部设置自定义字体即单个TextView设置字体,同时也提供了一些优秀的三方字体框架,基本可以满足开发者对字体设置的全部要求。


使用自定义字体前后效果图

一、assets是什么?

首先需要了解Android之assets

简而言之,你的图片、svg文件放在工程的res/drawabe下,则设置字体用到的字体文件则位于assets下面。

如何创建assets目录、点击进入

二、APP全局字体

2.1.引入库

代码如下(示例):

//用以设置App全局字体implementation 'uk.co.chrisjenx:calligraphy:2.2.0'

2.2.在Application中初始化calligraphy

代码如下(示例):

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();instance = this;//app字体CalligraphyConfig.initDefault(new CalligraphyConfig.Builder().setDefaultFontPath("fonts/OpenSans-Regular.ttf").setFontAttrId(R.attr.fontPath).build());}public static LightMeterApplication getInstance() {return instance;}}

在AndroidManifest.xml配置自定义MyApplication以替代默认Application

<applicationandroid:name=".MyApplication"android:allowBackup="false"android:hardwareAccelerated="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme">

下面是我的字体目录

下载字体,点击进入提取码:2555

你也可以导入Windows自带字体,

字体路径:C:\Windows\Fonts

我的Win10自带263种字体文件,下面是字体文件截图

2.3.让指定的Activity配置自定义字体

重写下面这个方法

//不重写的Activity还是安卓默认字体@Overrideprotected void attachBaseContext(Context newBase) {super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));}

2.3.1 Android Q 以及 Android X 开发环境报错

如果你的项目升级了AndroidX环境以及 android Q 上调试时则会报以下错误

E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.bigcat.edulearnaid, PID: 21204java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bigcat.edulearnaid/com.bigcat.edulearnaid.ui.StartActivity}: android.view.InflateException: Binary XML file line #17 in com.bigcat.edulearnaid:layout/abc_screen_simple: Binary XML file line #17 in com.bigcat.edulearnaid:layout/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayoutat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3895)

解决方法:

在项目build.gradle中添加如下依赖替代 uk.co.chrisjenx:calligraphy:2.2.0

implementation 'io.github.inflationx:calligraphy3:3.1.1'implementation 'io.github.inflationx:viewpump:2.0.3'

Application的onCreate()中初始化:

ViewPump.init(ViewPump.builder().addInterceptor(new CalligraphyInterceptor(new CalligraphyConfig.Builder().setDefaultFontPath("你的字体").setFontAttrId(R.attr.fontPath).build())).build());

BaseActivity中attachBaseContext的方法中

@Overrideprotected void attachBaseContext(Context newBase) {super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));}

三、单个TextView设置字体

和设置全局字体不同的是无需配置Application,无需引入依赖库calligraphy,仍需配置字体路径,使用下面的方法完成字体设置

3.1 使用Typeface + .ttf实现

protected Typeface tfRegular;//定义字体{tfRegular = Typeface.createFromAsset(getActivity().getAssets(), "fonts/OpenSans-Regular.ttf");//初始化字体textView.setTypeface(tfRegular);}

3.2 使用SDK自带字体

noraml (普通字体,系统默认使用的字体)

sans(非衬线字体)

serif (衬线字体)

monospace(等宽字体)

3.2.1 通过xml实现

<TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="580.6Ix"android:gravity="center"android:textStyle="bold" android:textSize="20sp"android:typeface="serif"android:textColor="@color/white"/><!-- android:textStyle="bold"字体加粗 --><!-- android:letterSpacing="0.2" 字体增加间距 --><!-- android:typeface="serif" 设置SDK自带字体 -->

3.2.2 通过Java逻辑代码实现

vSansText = (TextView) findViewById(R.id.sans);vSerifText = (TextView) findViewById(R.id.serif);vMonospaceText = (TextView) findViewById(R.id.monospace);//设置字体样式vSansText.setTypeface(Typeface.SANS_SERIF);vSerifText.setTypeface(Typeface.SERIF);vMonospaceText.setTypeface(Typeface.MONOSPACE);

3.3 使用RoBoto在xml设置字体

通过xml实现自定义设置字体的还包括RoBoto,Android4.0后默认字体就使用了Roboto,下面介绍一下使用方法:

3.3.1 xml中使用 android:fontFamily

android:fontFamily="sans-serif" // roboto regular android:fontFamily="sans-serif-light" // roboto light android:fontFamily="sans-serif-condensed" // roboto condensed android:fontFamily="sans-serif-thin" // roboto thin (android 4.2) //in combination with android:textStyle="normal|bold|italic"

3.3.2 fontFamily参数属性

四、优秀的个性化字体功能框架

4.1 通过Spannables设置文本样式

BabushkaText ★659 -

4.2 使关键词带有可点击的下划线TextView

UnderLineLinkTextView ★327 -

4.3 用手势缩放字体大小

PinchZoomTextView ★272 -

4.4 用颜色标记一些短语

ColorTextView ★214 -

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。