android 在代码中设置样式,安卓代码中设置fontFamily中的样式
今天和视觉调样式的时候,发现一个问题,我们代码中经常使用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中的样式相关推荐
- android 混淆移除log,关于安卓代码混淆和Release版本中去除Debug信息
我也不知道今天哪门子的心思看到这方面去了,这其实也就是一些固定东西的使用.怎么说呢,因为有些坑以前忽略了,今天记起来的就干掉吧. 以前优化apk的时候,网上查下来,基本上就是去掉无用的资源buildT ...
- android 模拟器声音设置,逍遥安卓模拟器运行游戏过程中没有声音怎么解决
有用户反映,使用逍遥安卓模拟器运行游戏过程中突然没有了声音,重新加载之后还是这样,这是为什么呢?针对这一问题,小编整理了具体的解决方法,大家可以学习保存. 逍遥安卓模拟器运行游戏过程中没有声音怎么解决 ...
- android 设置路由器,安卓手机怎么设置路由器?
摘 要 请问大家:安卓手机怎么设置路由器上网?答:在手机的浏览器中,打开路由器的设置页面后,就可以对路由器进行设置了. 所以,实际上不管是什么系统的手机,设置路由器的步骤是相同的,下面会进行演示介绍. ...
- android刷机恢复出厂设置吗,安卓手机怎么设置Recovery恢复出厂?
很多时候我们的手机会出现各个问题,可能只有刷机恢复出厂设置才能使手机正常使用,那么怎么进行Recovery恢复出厂设置呢?很多小白肯定就一点也不懂了,那么不用担心,下面奇兔刷机小编就安卓手机Recov ...
- 逍遥android模拟器设置,逍遥安卓模拟器最佳设置电脑上玩手游流畅不卡多开更好用...
电脑上玩腾讯手游使用哪个手游模拟器助手软件?对于目前大部分用户来说适合自己电脑情况的才是最好用的.大部分想在电脑上使用手游模拟器的用户要么是为了手游挂机方便,要么就是为了能够使用鼠标键盘大屏幕更好的操 ...
- 单位OV代码签名证书与EV代码签名证书有什么区别
以下内容由SSL盾www. ssldun .com整理发布 代码签名证书由权威CA机构验证软件开发者身份后签发,让软件开发者可以使用代码签名证书,对其开发的软件代码进行数字签名,用于验证开发者身份真实 ...
- html代码字号div style=,div字体大小设置 css设置div中字体大小尺寸样式
div字体大小设置 css设置div中字体大小尺寸样式设置篇 在css div布局中常常对div字体大小设置,这篇ThinkCSS为大家介绍div中字体大小尺寸样式设置,通过直接在div标签加字体大小 ...
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...
- rn代码与android,RN与原生通讯(安卓篇)
明天和意外你永远都不知道哪一个先来,编程界亦是如此.例如某个已经有原生代码开发模块的项目要求用RN扩张某些功能:又例如,RN中未封装到的组件非得求助于原生代码.所以RN与原生代码通讯对于混合编程是至关 ...
最新文章
- python如何使用图片做背景_用Python批量给照片换底色,基于opencv模块
- 手动清除后门程序Iexplores.exe
- html网页设如何置访问密码,利用JS给单页html加上简单访问密码,需要密码才能访问!...
- ajax 购物车 c#,c#购物车功能实现及收藏功能实现
- MongoDB安装、管理工具、操作
- matlab2c使用c++实现matlab函数系列教程-normstat函数
- 浅谈 block(1) – clang 改写后的 block 结构
- 用代码初始化APP的window
- 2019年程序员薪资报告,网友:年薪20万只是起薪?
- CSS,文本溢出显示省略号
- 打造成功IT项目经理——光环国际——读感
- Panda白话 - G1垃圾收集器 之 Refine线程
- 2015(2016届)校园招聘季——内推 篇
- 【遇见CUDA】CUDA算法效率提升关键点概述
- authorize(权限验证)
- 用 Python 快速获取基金持仓增减情况 | 更新版
- Java 8中的Base64编码和解码
- 【NOIP2013模拟联考5】小麦亩产一千八题解
- SMB交换机、接入交换机、汇聚交换机、核心交换机
- UVa 109 - SCUD Busters
热门文章
- 关于verilog实例化的介绍
- 摩尔庄园为啥这么火?
- Android studio中TextView改变字体的两种方式(如仿宋、隶书)
- 2021-01-14 PMP 群内练习题 - 光环
- 前端小技巧:ELement UI时间控件el-date-picker误差8小时
- Jq的SlideDown和SlideToggle
- 高斯函数的matlab表达式,高斯函数在图像处理中的应用
- jira接口(openapi)应用
- 实现文字的无缝滚动、间歇性向上翻滚
- 佳能5d3右下角红灯一直闪_佳能相机的红灯为什么一直闪 佳能相机为什么拍不了只显示...