Android自定义字体样式Typeface的三种技术方案:Java代码的setTypeface和xml的fontFamily配置方式

简介: Android自定义字体样式Typeface的三种技术方案:Java代码的setTypeface和xml的fontFamily配置方式Android实现自定义的字体Typeface,正常情况下有两种情况:第一种:把字体ttf文件放到assets/fonts目录下,然后通过读取字体文件.
Android自定义字体样式Typeface的三种技术方案:Java代码的setTypeface和xml的fontFamily配置方式


Android实现自定义的字体Typeface,正常情况下有两种情况:
第一种:把字体ttf文件放到assets/fonts目录下,然后通过读取字体文件.ttf获取Typeface,然后在上层Java代码通过setTypeface设置新字体,例如代码:

package app.zhangphil.application;

import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.text);
        textView.setText("zhang phil");
        Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf");
        textView.setTypeface(typeface);
    }
}

注意字体文件myfont.ttf的存放路径:assets/fonts/myfont.ttf





第二种:在新版的Android系统中,可以通过xml配置自定义的字体。具体做法,把自定义的字体库包放到res/font/目录下,然后就可以在xml像配置一般的Android属性一样通过配置android:fontFamily把@font/myfont配置上,自定义字体就设置了。

(1)把myfont.ttf放到res/font/目录下:



(2)在xml布局中配置字体样式:
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/myfont"
        android:text="zhang phil" />


第三种:承接第二种方案,使用第一种技术方案的实现路线。首先通过读取字体库文件获取Typeface,然后在上层Java代码设置。具体实现,假设在第二种解决方案基础上,已经把myfont.ttf文件放到 res/font/myfont.ttf 位置,然后就可以在上层Java代码像assets读文件一样读取:

    private Typeface getTypeface() {
        @SuppressLint("RestrictedApi")
        Typeface typeface = TypefaceCompat.createFromResourcesFontFile(activity, activity.getResources(), R.font.din_alternate_bold, "", 0);

        return typeface;
    }

借助getTypeface获取到typeface后,然后在上层Java代码中对TextView通过setTypeface设置字体样式:

text.setTypeface(typeface);

这三种技术方案相比较,推荐使用第二种方案,第一种方案不够灵活,且性能不佳,如果在大型项目中,仅在上层Java代码为设置一个字体样式,就得产生大量Java代码,还有就是,对于一般的固定的展示型文本,没有必要非得在上层Java代码通过findViewById,获取Java对象然后在setTypeface样式设置字体样式,用第二种方案,仅需一行xml代码的事儿。

注意,本文说设置字体有两种“正常”情况,还有一种剑走偏锋的实现方式是通过对Android系统的字体关键代码反射等手段,把Android系统配置好的字体样式作为载体,实现自己的自定义字体样式,这种方式在不同Android版本,不同设备上兼容性将遭受考验,若使用不慎或导致AApp崩溃,以现在的Android技术方案,不建议采取这种平台技术不安全的解决方案。
相关文章
|
20天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
65 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
5月前
|
搜索推荐 Android开发 开发者
Android星级评分条RatingBar样式的改变及出现问题的解决方法
本文介绍了自定义 RatingBar 的实现方法,通过布局文件、layer-list 样式文件和 style 文件的配置完成个性化星星评分效果。关键步骤包括:1) 在布局文件中添加 RatingBar 并引用样式;2) 创建 layer-list 文件定义背景、次级进度和进度图片;3) 在 style 文件中定义 RatingBar 样式并应用到布局中。可能出现的问题及解决办法:直接报错通常是图片素材过大,调整尺寸即可;星星流眼泪是图片形状问题,需将图片置于透明圆形或正方形内重新组合。附有具体代码示例,方便开发者快速上手实现自定义评分组件。
189 12
|
5月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
337 2
|
5月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
279 2
|
5月前
|
Android开发
Android控件样式的抽取(小提及快捷方式)
在Android开发中,若多个控件样式重复,可抽取公共部分以简化代码。例如对EditText提取样式,通过编辑`styles.xml`实现复用。为提高效率,Android Studio提供自动提取Style功能:右键点击控件样式选项,选择“Style...”,勾选需要提取的属性后确认,即可快速生成样式代码,显著提升开发便利性。
146 2
|
10月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
269 6
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
631 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
12月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
431 5
|
12月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
471 4

热门文章

最新文章