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功能

快乐工作,享受编程!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:如何快速实现按钮组功能

最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便

744
来自专栏kwcode

JS禁止鼠标右键、禁止全选、复制、粘贴的方法(所谓的防盗功能)

简述:一个防君子不防小人的鸡肋的功能,针对小白还行。 代码如下: <script> //都能支持 document.oncontextmenu = f...

3326
来自专栏iOSDevLog

Action API目录

2809
来自专栏前端说吧

html2canvas - 解决办法之图片跨域导致的截图空白

3497
来自专栏云飞学编程

python爬虫小知识,中文在url中的编码解码

有时候我们做爬虫经常会遇到这种编码格式,大概的样式为 %xx%xx%xx,对于这部分编码,python提供了一个quote的方法来编码,对应的解码为unquot...

703
来自专栏Python爬虫实战

Python爬虫之四:今日头条街拍美图

运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器

661
来自专栏Petrichor的专栏

tkinter: 事件 & 绑定 (Events and Bindings)

652
来自专栏河湾欢儿的专栏

伪类

:link 伪类将应用于未被访问过的链接,与:visited互斥。 :visited 伪类将应用于已经被访问过的链接,与:link互斥。 :hover ...

582
来自专栏天天

H5(drag,百度地图使用,requestFullscreen,H5应用缓存)

831
来自专栏前端说吧

html2canvas - 解决办法之图片跨域导致的截图空白

973

扫码关注云+社区