Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

您所在的位置:网站首页 自己创造字体给手机用的app Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

2023-12-12 22:47| 来源: 网络整理| 查看: 265

文章目录 前言一、assets是什么?二、APP全局字体2.1.引入库2.2.在Application中初始化calligraphy2.3.让指定的Activity配置自定义字体2.3.1 Java设置2.3.2 kotlin设置 2.4 Android Q 以及 Android X 开发环境报错2.4.1 java设置2.4.2 Kotlin设置 三、单个TextView设置字体3.1 使用Typeface + .ttf实现3.1.1 java2.1.2 kotlin 3.2 使用SDK自带字体3.2.1 通过xml实现3.2.2 通过Java逻辑代码实现3.2.3 通过kotlin逻辑代码实现 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 { @Override public 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

下面是我的字体目录 在这里插入图片描述

下载字体,点击进入提取码:2555 你也可以导入Windows自带字体, 字体路径:C:\Windows\Fonts 我的Win10自带263种字体文件,下面是字体文件截图 在这里插入图片描述

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

重写attachBaseContext

2.3.1 Java设置 //不重写的Activity还是安卓默认字体 @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } 2.3.2 kotlin设置 override fun attachBaseContext(newBase: Context) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)) } 2.4 Android Q 以及 Android X 开发环境报错 如果你的项目升级了AndroidX环境以及 android Q 上调试时则会报以下错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.bigcat.edulearnaid, PID: 21204 java.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.FitWindowsLinearLayout at 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()中初始化: 2.4.1 java设置 ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build())) .build()); 2.4.2 Kotlin设置 ViewPump.init( ViewPump.builder() .addInterceptor( CalligraphyInterceptor( CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build() ) ) .build() ) @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); } 三、单个TextView设置字体

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

3.1 使用Typeface + .ttf实现 3.1.1 java protected Typeface tfRegular;//定义字体 { tfRegular = Typeface.createFromAsset(getActivity().getAssets(), "fonts/OpenSans-Regular.ttf");//初始化字体 textView.setTypeface(tfRegular); } 2.1.2 kotlin protected var tfRegular: Typeface? = null // 定义字体 get() = field ?: Typeface.createFromAsset(requireActivity().assets, "fonts/OpenSans-Regular.ttf") // 初始化字体 textView.typeface = tfRegular // 设置字体 3.2 使用SDK自带字体

noraml (普通字体,系统默认使用的字体) sans(非衬线字体) serif (衬线字体) monospace(等宽字体)

3.2.1 通过xml实现 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.2.3 通过kotlin逻辑代码实现 vSansText = findViewById(R.id.sans) vSerifText = findViewById(R.id.serif) vMonospaceText = findViewById(R.id.monospace) // 设置字体样式 vSansText.typeface = Typeface.SANS_SERIF vSerifText.typeface = Typeface.SERIF vMonospaceText.typeface = 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参数属性 字体属性特征Regular标准字体Italic字体倾斜Bold字体加粗Bold-italic加粗和倾斜Light无衬线体字体Light-italic无衬线斜体Thin细体Thin-italic细斜体Condensed regular用于文本装潢、信息展示、网页设计、篆刻制模[cr]Condensed italic斜体版crCondensed bold粗体版crCondensed bold-italic粗斜体版cr 四、优秀的个性化字体功能框架 4.1 通过Spannables设置文本样式

BabushkaText ★659 -

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

UnderLineLinkTextView ★327 -

4.3 用手势缩放字体大小

PinchZoomTextView ★272 -

4.4 用颜色标记一些短语

ColorTextView ★214 -



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3