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

这篇具有很好参考价值的文章主要介绍了Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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


使用自定义字体前后效果图 android 设置全局字体,android,java,kotlin

一、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

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

下面是我的字体目录

android 设置全局字体,android,java,kotlin

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

android 设置全局字体,android,java,kotlin

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));
}

2.5 利用主题修改全局字体

在 application 中,通过 android:theme 来配置一个 App 的主题。一般新创建的项目,都是 @style/AppTheme 。在其中追加关于字体的属性 android:fontFamily,它就可以完成对全局设置一个系统字体。

android 设置全局字体,android,java,kotlin

三、单个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);
}

3.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实现

<TextView
    android: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.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,想要了解更多关于 Robote 的内容,可以去 Google 的网站上查看。下面介绍一下使用方法:

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"

normal 和 sans 的字体其实是一样的,serif 是一个带衬线的字体,而 nonospace 是等宽字体。

serif 在默认的字体上,增加了衬线。而 nonospace 限制了每个字符的宽度,让它们达到一个等宽的效果。

android 设置全局字体,android,java,kotlin

3.3.2 fontFamily参数属性

字体 属性特征
Regular 标准字体
Italic 字体倾斜
Bold 字体加粗
Bold-italic 加粗和倾斜
Light 无衬线体字体
Light-italic 无衬线斜体
Thin 细体
Thin-italic 细斜体
Condensed regular 用于文本装潢、信息展示、网页设计、篆刻制模[cr]
Condensed italic 斜体版cr
Condensed bold 粗体版cr
Condensed bold-italic 粗斜体版cr

3.3.3 fontFamily加载font资源包下的字体

1.将下载好的字体放到如下文件中

android 设置全局字体,android,java,kotlin

2.在xml中引用

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/anyeguihuapiaoxiang"
    android:text="设置单个TextView的字体-通过font资源文件" />

需要注意的是,如果同时配置了 typefacefontFamily ,将使用 fontFamily 配置的字体。

3.4 textStyle

textStyle 主要用于设定一些字体的样式,它是对所有的字体都生效的。也就是说哪怕你替换了字体,依然可以使用 textStyle 来修饰它的样式。textStyle 本身支持的可选项有 normal|bold|italic,它们也非常的好理解,就是普通|粗体|斜体

3.4.1 xml中使用

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="设置单个TextView的字体-textStyle"
    android:textStyle="bold|italic" />

3.5 Andorid 8.0+ 在资源中定义使用字体

1.右键单击res文件夹,然后转到“新建”>“Android资源目录”。此时会出现“新建资源目录”窗口。

2.在“资源类型”列表中,选择字体,然后单击“确定”。

3.将字体文件添加到字体文件夹中。

4.双击字体文件可以在编辑器中预览文件的字体。

这四步就是创建一个font资源文件,把下载好的字体放到文件中

3.5.1 创建字体

1.右键单击字体文件夹,然后转到“New”>“Font resource文件”。此时将显示“新建资源文件”窗口。

2.输入文件名,然后单击“确定”。新的字体资源XML将在编辑器中打开。

3.将每个字体文件、样式和权重属性封装在<font>元素中。以下XML说明了在字体资源XML中添加与字体相关的属性:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

3.5.2 在TextView中使用

在布局XML文件中,将fontFamily属性设置为要访问的字体文件。

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

3.5.3 动态调用

Typeface typeface = ResourcesCompat.getFont(context, R.font.lobster);

更多

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

4.1 通过Spannables设置文本样式

BabushkaText ★659 -

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

UnderLineLinkTextView ★327 -

4.3 用手势缩放字体大小

PinchZoomTextView ★272 -

4.4 用颜色标记一些短语

ColorTextView ★214 -

五、参考

参考1

参考2文章来源地址https://www.toymoban.com/news/detail-728304.html

到了这里,关于Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第四篇Android--TextView使用详解

    TextView是View体系中的一员,继承自View,用于在界面中展示文字。 基本用法: 1.   设置点击事件: 2.设置文字颜色1): 上面方式设置的颜色只有一种状态。如果需要TextView展示时一种颜色,按下时展示另外一种颜色,可以通过设置selector实现。     设置文字颜色2):   在

    2024年02月07日
    浏览(26)
  • Android TextView文字使用字体的3种方法

    Android给文字添加字体效果有3种方法: 1.直接在xml布局里面添加 先将字体文件复制到该位置  然后在xml中引用该文件 2.在activity里面设置(1)  先将字体文件复制到该位置 然后在activity里面设置该字体  3.在activity里面设置(2) 先将字体文件复制到该位置 然后在activity里面设

    2024年02月06日
    浏览(30)
  • android 12.0 第三方输入法app设置系统默认输入法

    在12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置输入法的相关功能需求,然后根据输入法包名来设置默认输入法 在设置系统默认输入法中 每个系统输入法的id不同 根据id设置输入法 需要先根据需要设置默认输入法的id,来

    2024年02月07日
    浏览(36)
  • Error:Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSeq

    在进行Android开发学习是遇到一个error: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)’ on a null object reference 原因:你定义的变量不被识别,他不知道是哪个。例如我的就是因为TextView有两个,系统不知道使用说,导致程序运行不起来。 我的xml有两

    2024年02月11日
    浏览(40)
  • 【干货】Android系统定制基础篇:第十四部分(禁止第三方应用调用系统设置、增加TP配置、增加摄像头镜像设置、增加摄像头默认角度设置、修改默认语言)

    修改文件 frameworksbasecorejavaandroidappActivityManagerNative.java 如下: 属性配置: Android 主板定制过程中经常出现客户需要临时适配各种 TP(包括 USB TP),因此在设置菜单中加入 xy 交换,x 反转,y 反转常用配置,以客户多样性需求。 以下修改基于Android 8.1 SDK,如下: 属性配置

    2024年02月10日
    浏览(26)
  • Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin

      在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)-CSDN博客 的基础上,实现一个功能,手指在上面原图的区域滑动,然后在下面的图中以若干放大因子放大显示切块出来的小图,下面切块出来的原图的圆心是手指在上面的触点

    2024年01月21日
    浏览(34)
  • Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin(二)

      在  Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin-CSDN博客 基础上,限定下面切图的绘制区域,超出绿色区域的轨迹线不再绘制。               所有的绘制轨迹线,都限定在了绿色的圆角矩形框中,超出区域不予绘制。       遗留问题,手

    2024年01月20日
    浏览(44)
  • Android初学之android studio运行java/kotlin程序

    第一步骤: File — New — New Module ,然后弹出一个框,(左边)选择 Java or Kotlin Library ,(右边)编辑自己的图书馆名、包名、类名,选择 Java 一个语言,然后 Finish 如下图: 然后,就可以看见我新建的 java Library 了,如下图: 第二步骤:马上写个测试程序 看看能不能运行

    2024年02月11日
    浏览(37)
  • Android可伸展textview

      显示内容最大显示行数配置 显示内容字体大小颜色配置 展开/收起图标配置 展开/收起位置配置 展开/收起字体大小颜色配置 展开/收起变化监听  xml:  collapseDrawable,expandDrawable  设置展开收起的图标  代码中设置TextView的内容:    

    2024年02月21日
    浏览(32)
  • Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)

    Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)       在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)-CSDN博客 文章浏览阅读313次,点赞4次,收藏3次。【代码】Android基于Matrix绘制Pain

    2024年01月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包