首页 > 其他分享 >Android全局替换字体

Android全局替换字体

时间:2024-07-09 11:22:12浏览次数:21  
标签:return NonNull 字体 attrs context Android 全局 name

一、概述

  由于业务需要,各端之间统一字体(Android、IOS、PC、网页)。所以android也需要替换成特定的字体。

  以后有可能还会增加其他的字体。

  方案:

    使用LayoutInflaterCompat.setFactory2来全局替换字体。这样做的好处是可以一次性的替换大部分的字体。剩余的个性化字体再单独适配。

      这样效率最高,最省时间。

二、代码示例

  1.在BaseActivity中加入

//全局字体设置
LayoutInflaterCompat.setFactory2(getLayoutInflater(), getLayoutFactory2());

  2.自定义一个类继承LayoutInflater.Factory2接口

private LayoutInflater.Factory2 getLayoutFactory2() {
        return new TextViewFontProxy();
    }

    private class TextViewFontProxy implements LayoutInflater.Factory2 {

        @Nullable
        @Override
        public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
            return getProxyView(name, context, attrs);
        }

        @Nullable
        @Override
        public View onCreateView(@NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
            return getProxyView(name, context, attrs);
        }
    }

    private View getProxyView(@NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs){
        switch(name){
            case "TextView":
                return new SiYuanBlackBodyTextView(context, attrs);
            case "EditText":
                return new SiYuanBlackBodyEditText(context, attrs);
        }
        return null;
    }

  3.自定义一个字体类

/**
 * 思源黑体,自定义字体
 */
class SiYuanBlackBodyTextView : AppCompatTextView {
    private val fontPath = "font/source_han_sans_cn_bold.otf"

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        setTypeFace()
    }

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
        setTypeFace()
    }

    constructor(context: Context) : super(context) {
        setTypeFace()
    }

    private fun setTypeFace() {
        try {
            includeFontPadding = false
            val typeface = Typeface.createFromAsset(context.assets, fontPath)
            setTypeface(typeface)
        } catch (ignored: Throwable) {
        }
    }
}

 

三、问题补充

  这里需要注意一下字体的上下填充,思源合体默认上下填充是非常大的。如果不做适配直接回影响全局的布局。

  这里在设置字体的时候加入includeFontPadding = false即可。作用:去掉字体上下填充

标签:return,NonNull,字体,attrs,context,Android,全局,name
From: https://www.cnblogs.com/tony-yang-flutter/p/18291383

相关文章

  • 纯小白uni-app+Android Studio离线打包
    一、HBulderX(1)cloud:开发者中心 注册登录(2)HBulderX登录开发者中心的账号,创建uni-app项目-》test,此时点击test下文件mainfest.json,会出现如下uni-app的AppID 同时在CLOUD上也会出现此项目,注意,项目名称和AppID要对上 (3)HBulderX本地打包 打包结果如下,期间要下什么插件,就让......
  • Android:如何绘制View
    点击查看Android如何绘制视图官网一、简介Android框架会在Activity获得焦点时请求Activity绘制其布局。Android框架会处理绘制流程,但该Activity必须提供其布局层次结构的根节点。Android框架会绘制布局的根节点,并测量和绘制布局树。它会通过遍历布局树并渲染......
  • Android 10.0 SystemUI启动流程
    1、手机开机后,Android系统首先会创建一个Zygote(核心进程)。2、由Zygote启动SystemServer。3、SystemServer会启动系统运行所需的众多核心服务和普通服务、以及一些应用及数据。例如:SystemUI启动就是从SystemServer里启动的。4、进入锁屏界面,开机完成。SystemServer中......
  • 晚上定时编译android系统
    1、问题可能偶然想晚上定时编译android系统2、解决at.sh#!/bin/sh#at-fat.shnow+1min#at-lset-eset-xecho$SHELLecho'atbuildbegin'/bin/date>>at_build.log/bin/bash-c'sourcebuild/envsetup.sh>>at_build.log2>&1;lu......
  • Android开发——使用Android Studio封装SDK(二) jar
    前言:什么叫SDK?  软件开发工具包(SoftwareDevelopmentKit,缩写SDK)一般是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。  Android常见的SDK有哪些形式?   (1).so库:是C或C++语言而打包成的库。   (2)......
  • 手机数据恢复:如何在没有root的情况下恢复Android数据?
    您是否不小心从Android设备中删除了重要数据?您是否担心如何取回您的照片、视频和文档?有时,我们不小心删除了重要数据,并使用Androidroot方法取回文件。许多用户不喜欢root他们的Android设备,因为这是一种复杂的方法。在本指南中,我们将告诉您如何使用最好的Android数据恢复软件奇......
  • Android 集成 Unity上的坑
    转载自CSDN1.Unity版本的差异Unity的版本在2019及其以下选择Mono方式打包出Android项目,反之选择IL2CPP方式打包Android项目为什么我会说这个Unity版本上会存在差异呢?因为我在工作时发现,我们项目原本是要升级到2022最新版的,但是发现2022用Mono方式打包出来的Android项目运行到An......
  • Android Studio实战演练-仿网易音乐播放器扩展
    效果图:首先按书里面一样敲出一首歌的播放也可以参考可以参考博主“林林要一直努力”写的,一首歌如下所示:林林要一直努力他写的教程链接AndroidStudio初学者实例:仿网易音乐播放器-CSDN博客https://blog.csdn.net/m0_59558544/article/details/131151435然后更改代码首先,多......
  • android中activity与fragment之间的各种跳转
    我们以音乐播放、视频播放、用户注册与登录为例【Musicfragment(音乐列表页)、Videofragment(视频列表页)、MusicAvtivity(音乐详情页)、VideoFragment(视频详情页)、LoginActivity(用户登录)、RegisterActivity(用户注册)】目录1.activity与activity之间的跳转2.activity与fragment之间......
  • 【计算机毕业设计】springboot基于Android的大学生勤工助学管理系统设计与实现
    大学生勤工助学管理系统设计的目的是为用户提供企业招聘、已投简历等方面的平台。与PC端应用程序相比,大学生勤工助学管理系统的设计主要面向于大学生勤工助学,旨在为管理员和学生、企业提供一个Android的大学生勤工助学管理系统。学生可以通过Android及时查看企业招聘等。......