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 条评论
登录 后参与评论

相关文章

来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3955
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

30810
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2605
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

25210
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2517
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2667
来自专栏落花落雨不落叶

canvas画简单电路图

58411
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2506

扫码关注云+社区