浅析Android加载字体包及封装的方法

TextView加载字体包

在 Android 中,若需要使得某个TextView加载字体包,使用以下方式即可:

 Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/Bold.otf");
  textView.setTypeface(typeFace);

至于字体包的位置:

通过以上方法,可以使得一个TextView加载某种字体包,但是,还有这种需求:

  • 部分TextView加载字体包
  • 每个TextView加载的字体包不一定一样

这时,我们就需要稍微封装下,将其封装成一个自定义TextView类,若需要使用字体包,则加载该类,同时,可以根据xml里面的值,从而加载不同的字体包。

封装

定义属性值

首先,我们需要从xml里面获取值,因此,需要在attr中进行属性值的定义:

<declare-styleable name="FontTextView">
  <attr name="fontType" format="enum">
   <enum name="bold" value="1" />
   <enum name="heavy" value="2" />
  </attr>
 </declare-styleable>

这里我只定义了两种属性,大家可以根据需求进行增减。

创建自定义TextView

public class FontTextView extends AppCompatTextView {

 public FontTextView(Context context) {
  super(context);
 }
 public FontTextView(Context context, @Nullable AttributeSet attrs) {
  this(context, attrs, 0);
 }
 public FontTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
}

获取属性值

//获取参数
  TypedArray a = context.obtainStyledAttributes(attrs,
    R.styleable.FontTextView, defStyleAttr, 0);

  int fontType = a.getInt(R.styleable.FontTextView_fontType, 1);

进行值判断并加载不同的字体包

private final int BOLD = 1;
 private final int HEAVY = 2;

 String fontPath = null;
  switch (fontType) {
   case BOLD:
    fontPath = "fonts/Bold.otf";
    break;
   case HEAVY:
    fontPath = "fonts/Heavy.otf";
    break;
   default:
  }
  //设置字体
  if (!TextUtils.isEmpty(fontPath)) {
   Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), fontPath);
   setTypeface(typeFace);
  }

全部源码

public class FontTextView extends AppCompatTextView {

 private final int BOLD = 1;

 private final int HEAVY = 2;

 public FontTextView(Context context) {
  super(context);
 }

 public FontTextView(Context context, @Nullable AttributeSet attrs) {
  this(context, attrs, 0);
 }

 public FontTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);

  //获取参数
  TypedArray a = context.obtainStyledAttributes(attrs,
    R.styleable.FontTextView, defStyleAttr, 0);

  int fontType = a.getInt(R.styleable.FontTextView_fontType, 1);

  String fontPath = null;
  switch (fontType) {
   case BOLD:
    fontPath = "fonts/Bold.otf";
    break;
   case HEAVY:
    fontPath = "fonts/Heavy.otf";
    break;
   default:
  }
  //设置字体
  if (!TextUtils.isEmpty(fontPath)) {
   Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), fontPath);
   setTypeface(typeFace);

  }
 }
}

若需要使用字体包TextView,使用以下方式即可:

<com.jm.core.common.widget.textview.FontTextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:fontType="bold"
  android:text="测试" />

效果

到此这篇关于浅析Android加载字体包及封装的方法的文章就介绍到这了,更多相关android加载字体包封装内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • android 封装抓取网页信息的实例代码

    复制代码 代码如下: package cn.mypic; import java.io.BufferedInputStream;      import java.io.BufferedReader;      import java.io.File;      import java.io.FileNotFoundException;      import java.io.FileOutputStream;      import java.io.IOException;      impo

  • AndroidStudio 实现加载字体资源的方法

    AndroidStudio 实现加载字体资源的方法 在android中字体的格式总是不能尽善尽美的显示出来 ,  于是要求我们使用一些有美感的字体,加载的方式(就像HTML的字体一样),我们需要通过加载字体的方式来使用android中不曾提供的字体; 首先在androidstudio中找到assets文件夹 , (位于serc/main/java下,与res在同一个文件里面) , 找到之后将字体文件(*.ttf)放入这个文件夹下(当然为了规范起见,我们可以再asseets下建立一个font文件夹

  • Android开发之ProgressBar字体随着进度条的加载而滚动

    在网上翻阅了很多关于ProgressBar滚动效果,但是始终没有找到适合项目中的这种效果,故自己写这篇文章,记录一下写作过程,给大家做一个参考.先看下最终效果效果图 我这里用的是LICEcap软件录制的gif图,效果有点掉帧,哪位仁兄有比较好的录制gif的软件烦请相告,小弟在此先行谢过. 首先看下xml代码,只有两个系统控件,一个TextView和一个ProgressBar,Button只是为了方便触发进度条的效果,实际项目中可以根据需求来做.首先看下xml中的代码: <?xml version

  • android控件封装 自己封装的dialog控件

    自定义dialog肯定是用的很多了但是感觉每次做都是很乱 单纯完成任务而已,现在封装了一下 以后用到直接copy 先上图: 主activity 复制代码 代码如下: package com.su.testcustomdialog; import com.su.testcustomdialog.MyDialog.Dialogcallback; import android.app.Activity; import android.os.Bundle; import android.view.Vie

  • 浅析Android加载字体包及封装的方法

    TextView加载字体包 在 Android 中,若需要使得某个TextView加载字体包,使用以下方式即可: Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/Bold.otf"); textView.setTypeface(typeFace); 至于字体包的位置: 通过以上方法,可以使得一个TextView加载某种字体包,但是,还有这种需求: 部分TextView加载字体包 每个TextView加载的字体

  • Android加载对话框同时异步执行实现方法

    Android中通过子线程连接网络获取资料,同时显示加载进度对话框给用户的操作,需要Thread和Handler来完成,在Thread中执行比较耗时的代码,完成后再通过Handler发送消息给主线程,由主线程刷新UI. 在实现上比较的烦琐,为简化此方法,花了点时间封装了Thread和Handler,现在通过简单的代码就可以实现相同的功能,而把更多精力放到业务逻辑处理上! 效果如图:   复制代码 代码如下: LoadingDialog loadingDialog = new LoadingDia

  • 在Vue.js中加载字体的正确方法

    添加字体不应该对性能产生负面影响.在本文中,我们将探讨在 Vue 应用程序中加载字体的最佳实践. 正确声明 font-face 的字体 确保正确声明字体是加载字体的重要方面.这是通过使用 font-face 属性来声明你选择的字体来实现的.在你的 Vue 项目中,这个声明可以在你的根 CSS 文件中完成.在进入这个问题之前,我们先来看看 Vue 应用的结构. /root public/ fonts/ Roboto/ Roboto-Regular.woff2 Roboto-Regular.woff

  • Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常

    Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常 1.高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多.大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常.我们可以通过下面的代码看

  • Android加载长图的多种方案分享

    背景介绍 在某些特定场景下,我们需要考虑加载长图的需求,比如加载一幅<清明上河图>,这个好像有点过分了,那就加载1/2的<清明上河图>吧... 那TMD还不是一样道理. 言归正传说一下我这边遇到的情况,之前有图片或大图的模块是划分为H5来实现的,现在需求变更划分为原生开发,那么问题就来了. 图片尺寸为 图片大小为 这一刻我是懵逼的,哪个端图片上传的时候没限制尺寸和压缩?mdzz, 吐槽归吐槽,还是要撸起袖子解决加载长图大图的问题. 先提供几个技术方案来对比一下: 方案1:WebVi

  • android加载系统相册图片并显示详解

    1,下载ImageLoad.jar包放入项目libs文件夹中,并点击右键->add as Library 2,首先记得在Manifest.xml注册权限(注:6.0以后的版本要在代码中动态注册权限) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.R

  • Visual studio 2017添加引用时报错未能正确加载ReferenceManagerPackage包的解决方法

    最近新装了2017,开始前几天还好,可是最近在添加引用时,报错 --------------------------- Microsoft Visual Studio --------------------------- 未能正确加载"ReferenceManagerPackage"包. 此问题可能是因配置更改或安装另一个扩展导致的.可通过查看文件"C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\1

  • Android 加载GIF图最佳实践方案

    起因 最近在项目中遇到需要在界面上显示一个本地的 GIF 图.按照惯例我直接用了 Glide 框架来实现. Glide 地址: https://github.com/bumptech/glide 我用的 Glide版本为 4.0.0-RC1 , 具体的实现代码如下: Glide.with( this ).asGif().load( R.drawable.yiba_location ).into( location_image ) ; 运行的效果很卡顿,我怀疑是不是方法没有用对,调了压缩模式,还是

  • Android加载Gif动画实现代码

    Android加载Gif动画如何实现?相信大家都很好奇,本文就为大家揭晓,内容如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_he

随机推荐