今天和视觉调样式的时候,发现一个问题,我们代码中经常使用fontFamily的样式,比如:

android:id="@+id/name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dip12"

android:text="小粗体样式"

android:textColor="@color/color_333333"

android:textSize="@dimen/dip12"

android:fontFamily="sans-serif-medium" />

//设置sans-serif-medium样式

但是如果我不是通过xml设置样式,而是想在自定义View中设置这种样式该怎么做呢?百度了一下,竟然没有找到相关的文章,真想给差评啊!那就只能靠自己了。

一/查看fontFamily属性的定义

该属性定义在系统的attrs.xml中,既然定义了一种属性,那么代码中一定会获取这个属性值。

二/查看TextView源代码中如何使用的

首先获取属性值赋值给一个内部类TextAppearanceAttributes,该类专门存储相关属性值。赋值给了mFontFamily

case com.android.internal.R.styleable.TextAppearance_fontFamily:

if (!context.isRestricted() && context.canLoadUnsafeResources()) {

try {

attributes.mFontTypeface = appearance.getFont(attr);

} catch (UnsupportedOperationException | Resources.NotFoundException e) {

// Expected if it is not a font resource.

}

}

if (attributes.mFontTypeface == null) {

attributes.mFontFamily = appearance.getString(attr);

}

attributes.mFontFamilyExplicit = true;

break;

然后看看哪里使用到mFontFamily。

//代码使用处

setTypefaceFromAttrs(attributes.mFontTypeface, attributes.mFontFamily,

attributes.mTypefaceIndex, attributes.mStyleIndex, attributes.mFontWeight);

相关的方法

/**

* Sets the Typeface taking into account the given attributes.

*

* @param typeface a typeface

* @param familyName family name string, e.g. "serif"

* @param typefaceIndex an index of the typeface enum, e.g. SANS, SERIF.

* @param style a typeface style

* @param weight a weight value for the Typeface or -1 if not specified.

*/

private void setTypefaceFromAttrs(@Nullable Typeface typeface, @Nullable String familyName,

@XMLTypefaceAttr int typefaceIndex, @Typeface.Style int style,

@IntRange(from = -1, to = Typeface.MAX_WEIGHT) int weight) {

if (typeface == null && familyName != null) {

// Lookup normal Typeface from system font map.

final Typeface normalTypeface = Typeface.create(familyName, Typeface.NORMAL);

resolveStyleAndSetTypeface(normalTypeface, style, weight);

} else if (typeface != null) {

resolveStyleAndSetTypeface(typeface, style, weight);

} else { // both typeface and familyName is null.

switch (typefaceIndex) {

case SANS:

resolveStyleAndSetTypeface(Typeface.SANS_SERIF, style, weight);

break;

case SERIF:

resolveStyleAndSetTypeface(Typeface.SERIF, style, weight);

break;

case MONOSPACE:

resolveStyleAndSetTypeface(Typeface.MONOSPACE, style, weight);

break;

case DEFAULT_TYPEFACE:

default:

resolveStyleAndSetTypeface(null, style, weight);

break;

}

}

}

所以参考源代码,我们就知道怎么使用了。

如果是TextView的话:

TextView textView=findViewById(R.id.text);

String familyName = "sans-serif-medium";

final Typeface normalTypeface = Typeface.create(familyName, Typeface.NORMAL);

textView.setTypeface(normalTypeface)

如果是TextPaint的话:

Paint paint = new Paint();

Typeface normalTypeface = Typeface.create("sans-serif-medium", Typeface.NORMAL);

paint.setTypeface(normalTypeface);

真的很简单,几分钟搞定,比百度中搜答案还快。

本文地址:https://blog.csdn.net/AA5279AA/article/details/110636893

android 在代码中设置样式,安卓代码中设置fontFamily中的样式相关推荐

  1. android 混淆移除log,关于安卓代码混淆和Release版本中去除Debug信息

    我也不知道今天哪门子的心思看到这方面去了,这其实也就是一些固定东西的使用.怎么说呢,因为有些坑以前忽略了,今天记起来的就干掉吧. 以前优化apk的时候,网上查下来,基本上就是去掉无用的资源buildT ...

  2. android 模拟器声音设置,逍遥安卓模拟器运行游戏过程中没有声音怎么解决

    有用户反映,使用逍遥安卓模拟器运行游戏过程中突然没有了声音,重新加载之后还是这样,这是为什么呢?针对这一问题,小编整理了具体的解决方法,大家可以学习保存. 逍遥安卓模拟器运行游戏过程中没有声音怎么解决 ...

  3. android 设置路由器,安卓手机怎么设置路由器?

    摘 要 请问大家:安卓手机怎么设置路由器上网?答:在手机的浏览器中,打开路由器的设置页面后,就可以对路由器进行设置了. 所以,实际上不管是什么系统的手机,设置路由器的步骤是相同的,下面会进行演示介绍. ...

  4. android刷机恢复出厂设置吗,安卓手机怎么设置Recovery恢复出厂?

    很多时候我们的手机会出现各个问题,可能只有刷机恢复出厂设置才能使手机正常使用,那么怎么进行Recovery恢复出厂设置呢?很多小白肯定就一点也不懂了,那么不用担心,下面奇兔刷机小编就安卓手机Recov ...

  5. 逍遥android模拟器设置,逍遥安卓模拟器最佳设置电脑上玩手游流畅不卡多开更好用...

    电脑上玩腾讯手游使用哪个手游模拟器助手软件?对于目前大部分用户来说适合自己电脑情况的才是最好用的.大部分想在电脑上使用手游模拟器的用户要么是为了手游挂机方便,要么就是为了能够使用鼠标键盘大屏幕更好的操 ...

  6. 单位OV代码签名证书与EV代码签名证书有什么区别

    以下内容由SSL盾www. ssldun .com整理发布 代码签名证书由权威CA机构验证软件开发者身份后签发,让软件开发者可以使用代码签名证书,对其开发的软件代码进行数字签名,用于验证开发者身份真实 ...

  7. html代码字号div style=,div字体大小设置 css设置div中字体大小尺寸样式

    div字体大小设置 css设置div中字体大小尺寸样式设置篇 在css div布局中常常对div字体大小设置,这篇ThinkCSS为大家介绍div中字体大小尺寸样式设置,通过直接在div标签加字体大小 ...

  8. java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...

    java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...

  9. rn代码与android,RN与原生通讯(安卓篇)

    明天和意外你永远都不知道哪一个先来,编程界亦是如此.例如某个已经有原生代码开发模块的项目要求用RN扩张某些功能:又例如,RN中未封装到的组件非得求助于原生代码.所以RN与原生代码通讯对于混合编程是至关 ...

最新文章

  1. python如何使用图片做背景_用Python批量给照片换底色,基于opencv模块
  2. 手动清除后门程序Iexplores.exe
  3. html网页设如何置访问密码,利用JS给单页html加上简单访问密码,需要密码才能访问!...
  4. ajax 购物车 c#,c#购物车功能实现及收藏功能实现
  5. MongoDB安装、管理工具、操作
  6. matlab2c使用c++实现matlab函数系列教程-normstat函数
  7. 浅谈 block(1) – clang 改写后的 block 结构
  8. 用代码初始化APP的window
  9. 2019年程序员薪资报告,网友:年薪20万只是起薪?
  10. CSS,文本溢出显示省略号
  11. 打造成功IT项目经理——光环国际——读感
  12. Panda白话 - G1垃圾收集器 之 Refine线程
  13. 2015(2016届)校园招聘季——内推 篇
  14. 【遇见CUDA】CUDA算法效率提升关键点概述
  15. authorize(权限验证)
  16. 用 Python 快速获取基金持仓增减情况 | 更新版
  17. Java 8中的Base64编码和解码
  18. 【NOIP2013模拟联考5】小麦亩产一千八题解
  19. SMB交换机、接入交换机、汇聚交换机、核心交换机
  20. UVa 109 - SCUD Busters

热门文章

  1. 关于verilog实例化的介绍
  2. 摩尔庄园为啥这么火?
  3. Android studio中TextView改变字体的两种方式(如仿宋、隶书)
  4. 2021-01-14 PMP 群内练习题 - 光环
  5. 前端小技巧:ELement UI时间控件el-date-picker误差8小时
  6. Jq的SlideDown和SlideToggle
  7. 高斯函数的matlab表达式,高斯函数在图像处理中的应用
  8. jira接口(openapi)应用
  9. 实现文字的无缝滚动、间歇性向上翻滚
  10. 佳能5d3右下角红灯一直闪_佳能相机的红灯为什么一直闪 佳能相机为什么拍不了只显示...