글꼴Fonts

개요Overview

API 수준 26부터 Android SDK를 사용 하면 레이아웃이 나 drawables과 마찬가지로 글꼴이 리소스로 처리 될 수 있습니다.Beginning with API level 26, the Android SDK allows fonts to be treated as resources, just like a layouts or drawables. Android 지원 라이브러리 26 NuGet 은 api 수준 14 이상을 대상으로 하는 앱에 새 font API를 이식할 수 있습니다.The Android Support Library 26 NuGet will backport the new font API's to those apps that target API level 14 or higher.

API 26을 대상으로 하거나 Android 지원 라이브러리 v26를 설치한 후에는 두 가지 방법으로 Android 응용 프로그램에서 글꼴을 사용할 수 있습니다.After targetting API 26 or installing the Android Support Library v26, there are two ways to use fonts in an Android application:

  1. 글꼴을 Android 리소스로 패키지 –이 경우 글꼴을 항상 응용 프로그램에서 사용할 수 있지만 apk의 크기가 증가 합니다.Package the font as an Android resource – this ensures that the font is always available to the application, but will increase the size of the APK.
  2. 글꼴 다운로드 – Android에서 글꼴 _공급자_의 글꼴 다운로드도 지원 합니다.Download the fonts – Android also supports downloading a font from a font provider. 글꼴 공급자는 글꼴이 장치에 이미 있는지 확인 합니다.The font provider checks if the font is already on the device. 필요한 경우 글꼴이 다운로드 되어 장치에 캐시 됩니다.If necessary, the font will be downloaded and cached on the device. 이 글꼴은 여러 응용 프로그램 간에 공유할 수 있습니다.This font can be shared between multiple applications.

비슷한 글꼴이 나 여러 스타일을 포함할 수 있는 글꼴은 _글꼴 패밀리_로 그룹화 될 수 있습니다.Similar fonts (or a font that may have several different styles) may be grouped into font families. 이를 통해 개발자는 가중치와 같은 글꼴의 특정 특성을 지정할 수 있습니다. 그러면 Android에서 글꼴 패밀리의 적절 한 글꼴을 자동으로 선택 합니다.This allows developers to specify certain attributes of the font, such as it's weight, and Android will automatically select the appropriate font from the font family.

Android Support Library v26는 글꼴에 대 한 포트 지원을 API 수준 26으로 백 합니다.The Android Support Library v26 will backport support for fonts to API level 26. 이전 API 수준을 대상으로 지정 하는 경우 app XML 네임 스페이스를 선언 하 고 android: 네임 스페이스 및 app: 네임 스페이스를 사용 하 여 다양 한 글꼴 특성의 이름을 지정 해야 합니다.When targeting the older API levels, it is necessary to declare the app XML namespace and to name the various font attributes using the android: namespace and the app: namespace. android: 네임 스페이스만 사용 하는 경우에는 해당 글꼴이 API 레벨 25를 실행 하는 장치에 표시 되지 않습니다.If only the android: namespace is used, then the fonts will not be displayed devices running API level 25 or less. 예를 들어 다음 XML 코드 조각은 API 수준 14 이상에서 작동 하는 새 글꼴 패밀리 리소스를 선언 합니다.For example, this XML snippet declares a new font family resource that will work in API level 14 and higher:

<?xml version="1.0" encoding="utf-8"?>
<font-family
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

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

</font-family>

글꼴이 Android 응용 프로그램에 적절 한 방식으로 제공 되는 한, fontFamily 특성을 설정 하 여 UI 위젯에 적용할 수 있습니다.As long as fonts are provided to an Android application in a proper way, they can be applied to a UI widget by setting the fontFamily attribute. 예를 들어 다음 코드 조각은 TextView에서 글꼴을 표시 하는 방법을 보여 줍니다.For example, the following snippet demonstrates how to display a font in a TextView:

<TextView
    android:text="The quick brown fox jumped over the lazy dog."
    android:fontFamily="@font/sourcesanspro_regular"
    app:fontFamily="@font/sourcesanspro_regular"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

이 가이드에서는 먼저 글꼴을 Android 리소스로 사용한 다음 런타임에 글꼴을 다운로드 하는 방법에 대해 설명 하는 방법에 대해 설명 합니다.This guide will first discuss how to use fonts as an Android resource, and then move on to discuss how to download fonts at runtime.

리소스로 서의 글꼴Fonts as a Resource

Android APK에 글꼴을 패키지 하면 응용 프로그램에서 항상 사용할 수 있습니다.Packaging a font into an Android APK ensures that it is always available to the application. 글꼴 파일 ( .TTF 또는입니다. Xamarin.ios 프로젝트의 Resources 폴더에 있는 하위 디렉터리에 파일을 복사 하 여 다른 리소스와 마찬가지로 xamarin.ios 응용 프로그램에 추가 됩니다.A font file (either a .TTF or a .OTF file) is added to a Xamarin.Android application just like any other resource, by copying files to a subdirectory in the Resources folder of a Xamarin.Android project. Fonts 리소스는 프로젝트의 resources 폴더에 있는 글꼴 하위 디렉터리에 보관 됩니다.Fonts resources are kept in a font sub-directory of the Resources folder of the project.

참고

글꼴은 Androidresource빌드 작업 을 수행 해야 합니다. 그렇지 않으면 최종 apk에 패키지 되지 않습니다.The fonts should have a Build Action of AndroidResource or they will not be packaged into the final APK. IDE에서 빌드 작업을 자동으로 설정 해야 합니다.The build action should be automatically set by the IDE.

비슷한 글꼴 파일이 여러 개 있는 경우 (예: 다른 가중치가 나 스타일을 사용 하는 동일한 글꼴) 글꼴 패밀리로 그룹화 할 수 있습니다.When there are many similar font files (for example, the same font with different weights or styles) it is possible to group them into a font family.

글꼴 패밀리Font Families

글꼴 패밀리는 가중치와 스타일이 다른 글꼴 집합입니다.A font family is a set of fonts that have different weights and styles. 예를 들어, 굵게 또는 기울임꼴 글꼴을 위한 별도의 글꼴 파일이 있을 수 있습니다.For example, there might be separate font files for bold or italic fonts. 글꼴 패밀리는 리소스/글꼴 디렉터리에 보관 된 XML 파일의 font 요소로 정의 됩니다.The font family is defined by font elements in an XML file that is kept in the Resources/font directory. 각 글꼴 패밀리에는 고유한 XML 파일이 있어야 합니다.Each font family should have it's own XML file.

글꼴 패밀리를 만들려면 먼저 리소스/글꼴 폴더에 모든 글꼴을 추가 합니다.To create a font family, first add all the fonts to the Resources/font folder. 그런 다음 글꼴 패밀리에 대 한 글꼴 폴더에 새 XML 파일을 만듭니다.Then create a new XML file in the font folder for the font family. XML 파일의 이름에는 참조 되는 글꼴에 대 한 선호도 또는 관계가 없습니다. 리소스 파일은 모든 올바른 Android 리소스 파일 이름일 수 있습니다.The name of the XML file has no affinity or relationship to the fonts being referenced; the resource file can be any legal Android resource file name. 이 XML 파일에는 하나 이상의 font 요소를 포함 하는 루트 font-family 요소가 있습니다.This XML file will have a root font-family element that contains one or more font elements. font 요소는 글꼴의 특성을 선언 합니다.Each font element declares the attributes of a font.

다음 XML은 다양 한 글꼴 가중치를 정의 하는 원본 San Pro 글꼴의 글꼴 패밀리에 대 한 예입니다.The following XML is an example of a font family for the Sources Sans Pro font that defines many different font weights. 이 파일은 sourcesanspro .xml이라는 리소스/글꼴 폴더에 파일로 저장 됩니다.This is saved as file in the Resources/font folder named sourcesanspro.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">
    <font android:font="@font/sourcesanspro_regular"
          android:fontStyle="normal"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_regular"
          app:fontStyle="normal"
          app:fontWeight="400" />
    <font android:font="@font/sourcesanspro_bold"
          android:fontStyle="normal"
          android:fontWeight="800"
          app:font="@font/sourcesanspro_bold"
          app:fontStyle="normal"
          app:fontWeight="800" />
    <font android:font="@font/sourcesanspro_italic"
          android:fontStyle="italic"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_italic"
          app:fontStyle="italic"
          app:fontWeight="400" />
</font-family>

fontStyle 특성에는 다음과 같은 두 가지 값을 사용할 수 있습니다.The fontStyle attribute has two possible values:

  • 일반 – 일반 글꼴normal – a normal font
  • 기울임꼴 – 기울임꼴italic – an italic font

fontWeight 특성은 CSS font-weight 특성에 해당 하며 글꼴 두께를 참조 합니다.The fontWeight attribute corresponds to the CSS font-weight attribute and refers to the thickness of the font. 100-900 범위의 값입니다.This is a value in the range of 100 - 900. 다음 목록에서는 일반적인 글꼴 가중치 값과 해당 이름을 설명 합니다.The following list describes the common font weight values and their name:

  • – 100Thin – 100
  • 매우 밝은 – 200Extra Light – 200
  • – 300Light – 300
  • 보통 – 400Normal – 400
  • 중간 – 500Medium – 500
  • 반 굵은 – 600Semi Bold – 600
  • 굵게 – 700Bold – 700
  • 매우 굵은 – 800Extra Bold – 800
  • 검정 – 900Black – 900

글꼴 패밀리를 정의한 후에는 레이아웃 파일의 fontFamily, textStylefontWeight 특성을 설정 하 여 선언적으로 사용할 수 있습니다.Once a font family has been defined, it can be used declaratively by setting the fontFamily, textStyle, and fontWeight attributes in the layout file. 예를 들어 다음 XML 코드 조각은 600 가중치 글꼴 (보통) 및 기울임꼴 텍스트 스타일을 설정 합니다.For example the following XML snippet sets a 600 weight font (normal) and an italic text style:

<TextView
    android:text="Sans Source Pro semi-bold italic, 600 weight, italic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/sourcesanspro"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_horizontal"
    android:fontWeight="600"
    android:textStyle="italic"
    />

프로그래밍 방식으로 글꼴 할당Programmatically Assigning Fonts

Resources.GetFont 메서드를 사용 하 여 Typeface 개체를 검색 하는 방식으로 글꼴을 프로그래밍 방식으로 설정할 수 있습니다.Fonts can be programmatically set by using the Resources.GetFont method to retrieve a Typeface object. 많은 보기에는 위젯에 글꼴을 할당 하는 데 사용할 수 있는 TypeFace 속성이 있습니다.Many views have a TypeFace property that can be used to assign the font to the widget. 이 코드 조각은 TextView에서 프로그래밍 방식으로 글꼴을 설정 하는 방법을 보여 줍니다.This code snippet shows how to programmatically set the font on a TextView:

Android.Graphics.Typeface typeface = this.Resources.GetFont(Resource.Font.caveat_regular);
textView1.Typeface = typeface;
textView1.Text = "Changed the font";

GetFont 메서드는 글꼴 패밀리 내에서 첫 번째 글꼴을 자동으로 로드 합니다.The GetFont method will automatically load the first font within a font family. 특정 스타일과 일치 하는 글꼴을 로드 하려면 Typeface.Create 메서드를 사용 합니다.To load a font that matches a specific style, use the Typeface.Create method. 이 메서드는 지정 된 스타일과 일치 하는 글꼴을 로드 하려고 합니다.This method will try to load a font that matches the specified style. 예를 들어이 코드 조각은 리소스/글꼴에 정의 된 글꼴 패밀리에서 굵게 표시 된 Typeface 개체를 로드 하려고 합니다.As an example, this snippet will try to load a bold Typeface object from a font family that is defined in Resources/fonts:

var typeface = Typeface.Create("<FONT FAMILY NAME>", Android.Graphics.TypefaceStyle.Bold);
textView1.Typeface = typeface;

글꼴 다운로드Downloading Fonts

Android는 응용 프로그램 리소스로 글꼴을 패키징하는 대신 원격 원본에서 글꼴을 다운로드할 수 있습니다.Instead of packaging fonts as an application resource, Android can download fonts from a remote source. 이를 통해 APK의 크기를 줄이는 것이 좋습니다.This will have the desirable effect of reducing the size of the APK.

_글꼴은 글꼴 공급자_의 지원과 함께 다운로드 됩니다.Fonts are downloaded with the assistance of a font provider. 이는 장치의 모든 응용 프로그램에 대 한 글꼴 다운로드 및 캐싱을 관리 하는 특수 한 콘텐츠 공급자입니다.This is a specialized content provider that manages the downloading and caching of fonts to all applications on the device. Android 8.0에는 Google 글꼴 리포지토리에서글꼴을 다운로드 하는 글꼴 공급자가 포함 되어 있습니다.Android 8.0 includes a font provider to download fonts from the Google Font Repository. 이 기본 글꼴 공급자는 Android 지원 라이브러리 v26를 사용 하 여 API 수준 14로 백 포팅 됩니다.This default font provider is backported to API level 14 with the Android Support Library v26.

앱에서 글꼴을 요청 하면 글꼴 공급자는 먼저 글꼴이 장치에 이미 있는지 확인 합니다.When an app makes a request for a font, the font provider will first check to see if the font is already on the device. 그렇지 않으면 글꼴 다운로드를 시도 합니다.If not, it will then attempt to download the font. 글꼴을 다운로드할 수 없는 경우 Android에서 기본 시스템 글꼴을 사용 합니다.If the font cannot be downloaded, then Android will use the default system font. 글꼴이 다운로드 되 면 초기 요청을 만든 앱 뿐만 아니라 장치의 모든 응용 프로그램에서 사용할 수 있습니다.Once the font has been downloaded, it is available to all applications on the device, not just the app that made the initial request.

글꼴을 다운로드 하도록 요청 하는 경우 앱은 글꼴 공급자를 직접 쿼리하지 않습니다.When a request is made to download a font, the app does not directly query the font provider. 대신, 앱은 FontsContract API (또는 지원 라이브러리 26이 사용 되는 경우 FontsContractCompat )의 인스턴스를 사용 합니다.Instead, apps will use an instance of the FontsContract API (or the FontsContractCompat if the Support Library 26 is being used).

Android 8.0는 다음과 같은 두 가지 방법으로 글꼴 다운로드를 지원 합니다.Android 8.0 supports downloading fonts in two different ways:

  1. 다운로드 가능한 글꼴을 리소스로 선언 – 앱에서 XML 리소스 파일을 통해 Android에 다운로드 가능한 글꼴을 선언할 수 있습니다.Declare Downloadable Fonts as a Resource – An app may declare downloadable fonts to Android via XML resource files. 이러한 파일에는 앱이 시작 될 때 Android에서 비동기적으로 글꼴을 다운로드 하 고 장치에서 캐시 하는 데 필요한 모든 메타 데이터가 포함 됩니다.These files will contain all of the meta-data that Android needs to asynchronously download the fonts when the app starts and cache them on the device.
  2. Android API 수준 26에서 프로그래밍 방식 으로 api를 – 응용 프로그램이 실행 되는 동안 응용 프로그램에서 프로그래밍 방식으로 글꼴을 다운로드할 수 있습니다.Programmatically – APIs in Android API level 26 allow an application to download the fonts programmatically, while the application is running. 앱은 지정 된 글꼴에 대 한 FontRequest 개체를 만들고이 개체를 FontsContract 클래스로 전달 합니다.Apps will create a FontRequest object for a given font, and pass this object to the FontsContract class. FontsContract FontRequest를 사용 하 여 _글꼴 공급자_에서 글꼴을 검색 합니다.The FontsContract takes the FontRequest and retrieves the font from a font provider. Android에서 동기적으로 글꼴을 다운로드 합니다.Android will synchronously download the font. FontRequest를 만드는 예제는이 가이드의 뒷부분에 나와 있습니다.An example of creating a FontRequest will be shown later in this guide.

사용 되는 방법에 관계 없이, 글꼴을 다운로드 하기 전에 Xamarin.ios 응용 프로그램에 추가 해야 하는 리소스 파일을 확인할 수 있습니다.Regardless of which approach is used, resources files that must be added to the Xamarin.Android application before fonts can be downloaded. 먼저 글꼴을 글꼴 패밀리의 일부로 리소스/글꼴 디렉터리의 XML 파일에 선언 해야 합니다.First, the font(s) must be declared in an XML file in the Resources/font directory as part of a font family. 이 코드 조각은 Android 8.0 (또는 Support Library v26)와 함께 제공 되는 기본 글꼴 공급자를 사용 하 여 Google Fonts Open Source collection 에서 글꼴을 다운로드 하는 방법의 예입니다.This snippet is an example of how to download fonts from the Google Fonts Open Source collection using the default font provider that comes with Android 8.0 (or Support Library v26):

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:fontProviderAuthority="com.google.android.gms.fonts"
             android:fontProviderPackage="com.google.android.gms"
             android:fontProviderQuery="VT323"
             android:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
             app:fontProviderAuthority="com.google.android.gms.fonts"
             app:fontProviderPackage="com.google.android.gms"
             app:fontProviderQuery="VT323"
             app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
>
</font-family>

font-family 요소는 다음 특성을 포함 하며, Android에서 글꼴을 다운로드 하는 데 필요한 정보를 선언 합니다.The font-family element contains the following attributes, declaring the information that Android requires to download the fonts:

  1. 이 경우 요청에 사용할 글꼴 공급자의 권한이 – Providerauthority 입니다.fontProviderAuthority – The authority of the Font Provider to be used for the request.
  2. 글꼴 패키지 – 요청에 사용할 글꼴 공급자의 패키지입니다.fontPackage – The package for the Font Provider to be used for the request. 공급자의 id를 확인 하는 데 사용 됩니다.This is used to verify the identity of the provider.
  3. 글꼴 쿼리 – 글꼴 공급자가 요청한 글꼴을 찾는 데 도움이 되는 문자열입니다.fontQuery – This is a string that will help the font provider locate the requested font. 글꼴 쿼리 정보는 글꼴 공급자에 따라 다릅니다.Details on the font query are specific to the font provider. 다운로드 가능한 글꼴 샘플 앱의 QueryBuilder 클래스는 Google fonts Open Source Collection의 글꼴에 대 한 쿼리 형식에 대 한 일부 정보를 제공 합니다.The QueryBuilder class in the Downloadable Fonts sample app provides some information on the query format for fonts from the Google Fonts Open Source Collection.
  4. 가 중 providercertificate 는 공급자에 서명 해야 하는 인증서의 해시 집합 목록이 포함 된 리소스 배열을 – 합니다.fontProviderCerts – A resource array with the list of sets of hashes for the certificates that the provider should be signed with.

글꼴이 정의 되 면 다운로드와 관련 된 글꼴 인증서 에 대 한 정보를 제공 해야 할 수 있습니다.Once the fonts are defined, it may be necessary to provide information about the font certificates involved with the download.

글꼴 인증서Font Certificates

장치에 글꼴 공급자가 미리 설치 되어 있지 않거나 앱에서 Xamarin.Android.Support.Compat 라이브러리를 사용 하는 경우 Android에서 글꼴 공급자의 보안 인증서가 필요 합니다.If the font provider is not preinstalled on the device, or if the app is using the Xamarin.Android.Support.Compat library, Android requires the security certificates of the font provider. 이러한 인증서는 리소스/값 디렉터리에 유지 되는 배열 리소스 파일에 나열 됩니다.These certificates will be listed in an array resource file that is kept in Resources/values directory.

예를 들어 다음 XML은 Resources/values/fonts_cert 라는 이름으로 지정 되며 Google 글꼴 공급자에 대 한 인증서를 저장 합니다.For example, the following XML is named Resources/values/fonts_cert.xml and stores the certificates for the Google font provider:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="com_google_android_gms_fonts_certs">
        <item>@array/com_google_android_gms_fonts_certs_dev</item>
        <item>@array/com_google_android_gms_fonts_certs_prod</item>
    </array>
    <string-array name="com_google_android_gms_fonts_certs_dev">
        <item>
            MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
        </item>
    </string-array>
    <string-array name="com_google_android_gms_fonts_certs_prod">
        <item>
            MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
        </item>
    </string-array>
</resources>

이러한 리소스 파일이 준비 되 면 앱에서 글꼴을 다운로드할 수 있습니다.With these resource files in place, the app is capable of downloading the fonts.

다운로드 가능한 글꼴을 리소스로 선언Declaring Downloadable Fonts as Resources

Android는 Androidmanifest에서 다운로드 가능한 글꼴을 나열 하 여 앱이 처음 시작 될 때 해당 글꼴을 비동기식으로 다운로드 합니다.By listing the downloadable fonts in the AndroidManifest.XML, Android will asynchronously download the fonts when the app first starts. 글꼴 자체는 다음과 유사 하 게 배열 리소스 파일에 나열 됩니다.The font's themselves are listed in an array resource file, similar to this one:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="downloadable_fonts" translatable="false">
        <item>@font/vt323</item>
    </array>
</resources>

이러한 글꼴을 다운로드 하려면 meta-dataapplication 요소의 자식으로 추가 하 여 Androidmanifest 에 선언 해야 합니다.To download these fonts, they have to be declared in AndroidManifest.XML by adding meta-data as a child of the application element. 예를 들어 다운로드 가능한 글꼴이 Resources/values/downloadable_fonts의 리소스 파일에 선언 된 경우이 코드 조각을 매니페스트에 추가 해야 합니다.For example, if the downloadable fonts are declared in a resource file at Resources/values/downloadable_fonts.xml, then this snippet would have to be added to the manifest:

<meta-data android:name="downloadable_fonts" android:resource="@array/downloadable_fonts" />

글꼴 Api를 사용 하 여 글꼴 다운로드Downloading a Font with the Font APIs

FontRequest 개체를 인스턴스화하고 FontContractCompat.RequestFont 메서드에 전달 하 여 프로그래밍 방식으로 글꼴을 다운로드할 수 있습니다.It is possible to programmatically download a font by instantiating a FontRequest object and passing that to the FontContractCompat.RequestFont method. FontContractCompat.RequestFont 메서드는 먼저 장치가 장치에 있는지 확인 한 다음 필요한 경우 해당 글꼴 공급자를 비동기적으로 쿼리하고 앱에 대 한 글꼴 다운로드를 시도 합니다.The FontContractCompat.RequestFont method will first check to see if the font exists on the device, and then if necessary will asynchronously query the font provider and try to download the font for the app. FontRequest에서 글꼴을 다운로드할 수 없는 경우 Android에서 기본 시스템 글꼴을 사용 합니다.If FontRequest is unable to download the font, then Android will use the default system font.

FontRequest 개체에는 글꼴 공급자가 글꼴을 찾아서 다운로드 하는 데 사용 되는 정보가 들어 있습니다.A FontRequest object contains information that will be used by the font provider to locate and download a font. FontRequest에는 다음과 같은 네 가지 정보가 필요 합니다.A FontRequest requires four pieces of information:

  1. 글꼴 공급자 권한 – 요청에 사용할 글꼴 공급자의 인증 기관입니다.Font Provider Authority – The authority of the Font Provider to be used for the request.
  2. 글꼴 패키지 – 요청에 사용할 글꼴 공급자의 패키지입니다.Font Package – The package for the Font Provider to be used for the request. 공급자의 id를 확인 하는 데 사용 됩니다.This is used to verify the identity of the provider.
  3. 글꼴 쿼리 – 글꼴 공급자가 요청 된 글꼴을 찾는 데 도움이 되는 문자열입니다.Font Query – This is a string that will help the font provider locate the requested font. 글꼴 쿼리 정보는 글꼴 공급자에 따라 다릅니다.Details on the font query are specific to the font provider. 문자열의 세부 정보는 글꼴 공급자와 관련이 있습니다.The details of the string are specific to the font provider. 다운로드 가능한 글꼴 샘플 앱의 QueryBuilder 클래스는 Google fonts Open Source Collection의 글꼴에 대 한 쿼리 형식에 대 한 일부 정보를 제공 합니다.The QueryBuilder class in the Downloadable Fonts sample app provides some information on the query format for fonts from the Google Fonts Open Source Collection.
  4. 글꼴 공급자 인증서 는 공급자에 서명 해야 하는 인증서의 해시 집합 목록이 포함 된 리소스 배열을 – 합니다.Font Provider Certificates – A resource array with the list of sets of hashes for the certificates the provider should be signed with.

이 코드 조각은 새 FontRequest 개체를 인스턴스화하는 예제입니다.This snippet is an example of instantiating a new FontRequest object:

FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms", <FontToDownload>, Resource.Array.com_google_android_gms_fonts_certs);

위의 코드 조각에서 FontToDownload는 Google Fonts Open Source collection의 글꼴을 돕는 쿼리입니다.In the previous snippet FontToDownload is a query that will help the font from the Google Fonts Open Source collection.

FontRequestFontContractCompat.RequestFont 메서드에 전달 하기 전에 두 가지 개체를 만들어야 합니다.Before passing the FontRequest to the FontContractCompat.RequestFont method, there are two objects that must be created:

  • FontsContractCompat.FontRequestCallback –는 확장 해야 하는 추상 클래스입니다.FontsContractCompat.FontRequestCallback – This is an abstract class which must be extended. RequestFont 완료 되 면 호출 되는 콜백입니다.It is a callback that will be invoked when RequestFont is finished. Xamarin Android 앱은 FontsContractCompat.FontRequestCallback를 서브클래싱하 고 OnTypefaceRequestFailedOnTypefaceRetrieved를 재정의 하 여 다운로드가 실패할 때 수행할 작업을 제공 해야 합니다.A Xamarin.Android app must subclass FontsContractCompat.FontRequestCallback and override the OnTypefaceRequestFailed and OnTypefaceRetrieved, providing the actions to be taken when the download fails or succeeds respectively.
  • Handler – 필요한 경우 RequestFont에서 사용 하 여 스레드에 글꼴을 다운로드 하는 데 사용 되는 Handler입니다.Handler – This is a Handler which will be used by RequestFont to download the font on a thread, if necessary. UI 스레드에서 글꼴을 다운로드 해서는 안 됩니다.Fonts should not be downloaded on the UI thread.

이 코드 조각은 Google Fonts Open Source C# collection에서 비동기적으로 글꼴을 다운로드 하는 클래스의 예입니다.This snippet is an example of a C# class that will asynchronously download a font from Google Fonts Open Source collection. FontRequestCallback 인터페이스를 구현 하 고 FontRequest완료 되 C# 면 이벤트를 발생 시킵니다.It implements the FontRequestCallback interface, and raises a C# event when FontRequest has finished.

public class FontDownloadHelper : FontsContractCompat.FontRequestCallback
{
    // A very simple font query; replace as necessary
    public static readonly String FontToDownload = "Courgette";

    Android.OS.Handler Handler = null;

    public event EventHandler<FontDownloadEventArg> FontDownloaded = delegate
    {
        // just an empty delegate to avoid null reference exceptions.  
    };

    public void DownloadFonts(Context context)
    {
        FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms",FontToDownload , Resource.Array.com_google_android_gms_fonts_certs);
        FontsContractCompat.RequestFont(context, request, this, GetHandlerThreadHandler());
    }

    public override void OnTypefaceRequestFailed(int reason)
    {
        base.OnTypefaceRequestFailed(reason);
        FontDownloaded(this, new FontDownloadEventArg(null));
    }

    public override void OnTypefaceRetrieved(Android.Graphics.Typeface typeface)
    {
        base.OnTypefaceRetrieved(typeface);
        FontDownloaded(this, new FontDownloadEventArg(typeface));
    }

    Handler GetHandlerThreadHandler()
    {
        if (Handler == null)
        {
            HandlerThread handlerThread = new HandlerThread("fonts");
            handlerThread.Start();
            Handler = new Handler(handlerThread.Looper);
        }
        return Handler;
    }
}

public class FontDownloadEventArg : EventArgs
{
    public FontDownloadEventArg(Android.Graphics.Typeface typeface)
    {
        Typeface = typeface;
    }
    public Android.Graphics.Typeface Typeface { get; private set; }
    public bool RequestFailed
    {
        get
        {
            return Typeface != null;
        }
    }
}

이 도우미를 사용 하려면 새 FontDownloadHelper 만들어지고 이벤트 처리기가 할당 됩니다.To use this helper, a new FontDownloadHelper is created, and an event handler is assigned:

var fontHelper = new FontDownloadHelper();

fontHelper.FontDownloaded += (object sender, FontDownloadEventArg e) =>
{
    //React to the request
};
fontHelper.DownloadFonts(this); // this is an Android Context instance.

요약Summary

이 가이드에서는 다운로드 가능한 글꼴 및 글꼴을 리소스로 지원 하기 위해 Android 8.0의 새 Api에 대해 설명 했습니다.This guide discussed the new APIs in Android 8.0 to support downloadable fonts and fonts as resources. 기존 글꼴을 APK에 포함 하 고 레이아웃에서 사용 하는 방법에 대해 설명 했습니다.It discussed how to embed existing fonts in an APK and to use them in a layout. 또한 Android 8.0는 프로그래밍 방식으로 또는 리소스 파일에서 글꼴 메타 데이터를 선언 하 여 글꼴 공급자의 글꼴 다운로드를 지 원하는 방법도 설명 합니다.It also discussed how Android 8.0 supports downloading fonts from a font provider, either programmatically or by declaring the font meta-data in resource files.