Android O:使用自定义字体资源

前言

Android O中的新功能之一是使用自定义字体资源。在这篇文章中,我们一起来看看如何在我们的应用程序中使用它们。

在Android O之前,在我们的应用中使用自定义字体有多困难?我们有两个选择:
1、编写自定义view
2、使用lib引入第三方字体

字体资源入门

Android O通过字体资源支持自定义字体。在app / res文件夹中新建文件夹,

在Android Studio中创建新的资源目录.png

创建字体文件夹很容易.就像创建 menu, values, drawable等等。

所以右键单击res文件夹并创建一个新font文件夹。

创建一个新的字体资源目录.png
字体格式

Android O支持.otf(OpenType)和.ttf(TrueType)字体格式。

我现在创建一个简单的页面。像一本书,标题是大型衬线字体。

我们将要创建的.png

在Android O中使用自定义字体资源

对于这篇Android O的文章,我将从Google字体中选择我的字体。

我的两个字体选择是:
1、Merriweather
2、Lato
以下是Merriweather的可用字体样式。

通过fonts.google.com下载字体.png

您可以下载您选择的.otf或.ttf字体,并将它们放在res / fonts文件夹中。

请注意,资源文件应使用小写字母和下划线。例如,下载的字体是Merriweather-Regular.ttf。当您将其复制到res / fonts文件夹时,将其重命名为merriweather_regular.ttf。

一旦您放入fonts文件夹中的自定义字体文件,就可以预览字体。只需双击一个字体,Android Studio会预览字体。

字体预览.png

转到您的XML布局文件。我们跳过布局设计,直接使用我们的字体。

<TextView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:fontFamily="@font/merriweather_regular"/>

这是我简单的TextView。需要使用里面的一个属性,是的,就是这么简单!

android:fontFamily="@font/merriweather_regular"

通过Java自定义字体

您可以通过编程方式分配字体。先取字体字体。然后把它设置为你的TextView。

Typeface typefaceLato = getResources().getFont(R.font.lato_regular);
mTextIntro.setTypeface(typefaceLato);

此外,您甚至可以指定一个基本的字体样式,如粗体,斜体或两者的组合。

mTextIntro.setTypeface(typefaceLato,Typeface.BOLD_ITALIC);
自定义字体样式.png

如果您使用的是字体系列,则会有相同的字体,权重不同。

你知道我在说什么,如果你下载一个字体并解压缩.zip文件,你会得到这样的多种字体变体。

字体资源.png

所以例如,假设我正在使用Merriweather-Regular。如果将字体样式设为粗体,Android将从我的字体系列中选择Merriweather-Bold,并显示。

使用字体系列

如上所述,如果您想在不同的样式中使用相同的字体呢?好的,也许你可以使用粗体或斜体的默认字体样式。但是如果你想要更薄的字体呢?薄而斜体?

创建一个字体系列

3个简单的步骤就可以做到这一点。
1、右键单击res / fonts文件夹并创建一个新的“ 字体资源文件 ”。

创建新字体资源文件.png

2、为要包含的每个字体变体添加一个元素。让我们回到我们想要做的设计。字体样式很薄,粗体和斜体将是很好的。所以我们再加三个。

我只想改变body内容的字体。所以我们为Lato添加3个字体变体。

<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:font="@font/lato_light"
        android:fontStyle="normal"
        android:fontWeight="300"/>

    <font
        android:font="@font/lato_regular"
        android:fontStyle="normal"
        android:fontWeight="400"/>

    <font
        android:font="@font/lato_bold"
        android:fontStyle="normal"
        android:fontWeight="700"/>
</font-family>

如果您不确定fontWeight,可以快速浏览Google字体将解除您的疑问。

谷歌字体下载ttf.png

之后,使用来自字体系列的单个字体是一样的。只需通过字体属性引用它们

android:fontFamily="@font/lato_black"

只要记住首先将所有的字体变体添加到字体文件夹。然后创建一个“ 字体资源文件 ”。然后添加每个字体变体的元素。最后,参考你的字体风格就像一个常规的单一字体。

自定义字体样式的可读性

在字体上直接使用字体TextView并不能保证良好的可读性。我们来看看。

默认的textview.png

这看起来很困难,所以如果您的应用程序的优先级是用户阅读内容。那么它也是您的首要任务,以确保内容易于阅读。
关键在于两个属性:
1、letterSpacing
2、lineSpacingExtra

所以考虑到这一点,这里是我TextView 在布局中的元素。

...
<TextView
    style="@style/TextAppearance.AppCompat.Headline"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/merriweather_regular" />

<TextView
    style="@style/TextAppearance.AppCompat.Subhead"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:lineSpacingExtra="4dp"
    android:letterSpacing="0.08" />

<TextView
    style="@style/TextAppearance.AppCompat.Body1"
    android:layout_width="match_parent"
    android:letterSpacing="0.04"
    android:layout_height="wrap_content"
    android:fontFamily="@font/lato_regular"
    android:lineSpacingExtra="4dp" />
...

使用这些额外的属性,字体现在应该很容易阅读。

前后对比.png

如果您很难记住不同的属性,请使用XML编辑器中的“ 设计 ”窗格。右侧的“ 属性 ”窗格列出了您可以更改的所有可用属性。


XML编辑器设计视图中的TextView属性.png

最终结果

修改后的.png

哪里能了解更多的信息?

使用自定义字体资源只是Android O中的新功能之一。您可以在这里阅读其他Android O功能

快乐工作,享受编程!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,280评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,340评论 0 17
  • 作为一名前端coder,用的最多的请求就是ajax请求了。或许你用的其他框架,但是从原生js到jquery,aja...
    柯琦阅读 1,970评论 0 4
  • 晨梦 诗/凯歌儿 一阵未接来电 撕开梦的欺骗 惊魂初定的梦魇 洗把脸才安全 晨雾中高楼林立 冰冷的钢筋水泥 露霜芳...
    凯歌儿阅读 234评论 0 2