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的文章,我将从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"
您可以通过编程方式分配字体。先取字体字体。然后把它设置为你的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功能。