글꼴

개요

API 수준 26부터 Android SDK를 사용하면 레이아웃 또는 그리기 파일처럼 글꼴을 리소스로 처리할 수 있습니다. Android 지원 라이브러리 26 NuGet은 새 글꼴 API를 API 수준 14 이상을 대상으로 하는 앱에 백포팅합니다.

API 26을 대상으로 하거나 Android 지원 라이브러리 v26을 설치한 후에는 Android 애플리케이션에서 글꼴을 사용하는 두 가지 방법이 있습니다.

  1. 글꼴을 Android 리소스 로 패키지합니다. 이렇게 하면 애플리케이션에서 항상 글꼴을 사용할 수 있지만 APK의 크기가 증가합니다.
  2. 글꼴 다운로드 - Android는 글꼴 공급자에서 글꼴 다운로드도 지원합니다. 글꼴 공급자는 글꼴이 장치에 이미 있는 경우 검사. 필요한 경우 글꼴이 다운로드되어 디바이스에 캐시됩니다. 이 글꼴은 여러 애플리케이션 간에 공유할 수 있습니다.

비슷한 글꼴(또는 여러 스타일이 있을 수 있는 글꼴)을 글꼴 패밀리로 그룹화 할 수 있습니다. 이렇게 하면 개발자가 글꼴의 무게와 같은 특정 특성을 지정할 수 있으며 Android는 글꼴 패밀리에서 적절한 글꼴을 자동으로 선택합니다.

Android 지원 라이브러리 v26은 글꼴에 대한 지원을 API 수준 26으로 백포트합니다. 이전 API 수준을 대상으로 지정할 때는 XML 네임스페이스를 선언 app 하고 네임스페이스와 네임스페이스를 사용하여 다양한 글꼴 특성의 android:app: 이름을 지정해야 합니다. 네임스페이스만 android: 사용하는 경우 글꼴은 API 수준 25 이하를 실행하는 디바이스에 표시되지 않습니다. 예를 들어 이 XML 코드 조각은 API 수준 14 이상에서 작동하는 새 글꼴 패밀리 리소스를 선언합니다.

<?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 위젯에 적용할 수 있습니다. 예를 들어 다음 코드 조각은 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 리소스로 사용하는 방법을 설명한 다음, 런타임에 글꼴을 다운로드하는 방법을 설명합니다.

리소스로서의 글꼴

Android APK에 글꼴을 패키징하면 애플리케이션에서 항상 사용할 수 있습니다. 글꼴 파일(. TTF 또는 . OTF 파일)은 Xamarin.Android 프로젝트의 Resources 폴더에 있는 하위 디렉터리에 파일을 복사하여 다른 리소스와 마찬가지로 Xamarin.Android 애플리케이션에 추가됩니다. 글꼴 리소스는 프로젝트의 Resources 폴더의 글꼴 하위 디렉터리에 보관됩니다.

참고 항목

글꼴에 AndroidResource빌드 동작이 있거나 최종 APK에 패키지되지 않습니다. 빌드 작업은 IDE에 의해 자동으로 설정되어야 합니다.

비슷한 글꼴 파일이 많은 경우(예: 가중치 또는 스타일이 다른 동일한 글꼴) 글꼴 패밀리로 그룹화할 수 있습니다.

글꼴 패밀리

글꼴 패밀리는 가중치와 스타일이 다른 글꼴 집합입니다. 예를 들어 굵게 또는 기울인 글꼴에 대한 별도의 글꼴 파일이 있을 수 있습니다. 글꼴 패밀리는 Resources/font 디렉터리에 보관되는 XML 파일의 요소에 의해 font 정의됩니다. 각 글꼴 패밀리에는 고유한 XML 파일이 있어야 합니다.

글꼴 패밀리를 만들려면 먼저 리소스/글꼴 폴더에 모든 글꼴추가합니다. 그런 다음 글꼴 패밀리의 글꼴 폴더에 새 XML 파일을 만듭니다. XML 파일의 이름은 참조되는 글꼴과 선호도 또는 관계가 없습니다. 리소스 파일은 모든 법적 Android 리소스 파일 이름이 될 수 있습니다. 이 XML 파일에는 하나 이상의 font 요소가 포함된 루트 font-family 요소가 있습니다. 각 font 요소는 글꼴의 특성을 선언합니다.

다음 XML은 다양한 글꼴 가중치를 정의하는 Sources Sans Pro 글꼴에 대한 글꼴 패밀리의 예입니다. 이 파일은 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 다음과 같은 두 가지 가능한 값이 있습니다.

  • normal – 일반 글꼴
  • 기울임 꼴 – 기울임꼴 글꼴

이 특성은 fontWeight CSS font-weight 특성에 해당하며 글꼴 두께를 나타냅니다. 이 값은 100 - 900 범위의 값입니다. 다음 목록에서는 일반적인 글꼴 두께 값과 해당 이름을 설명합니다.

  • – 100
  • 추가 조명 – 200
  • 밝게 – 300
  • 보통 – 400
  • 보통 – 500
  • 세미 굵게 - 600
  • 굵게 - 700
  • 추가 굵게 - 800
  • 검정 색 – 900

글꼴 패밀리가 정의되면 레이아웃 파일에서 , textStylefontWeight 특성을 설정fontFamily하여 선언적으로 사용할 수 있습니다. 예를 들어 다음 XML 코드 조각은 600 가중치 글꼴(기본) 및 기울인 텍스트 스타일을 설정합니다.

<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"
    />

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

메서드를 사용하여 개체를 검색하여 글꼴을 Resources.GetFont 프로그래밍 방식으로 설정할 수 있습니다 Typeface . 많은 보기에는 TypeFace 위젯에 글꼴을 할당하는 데 사용할 수 있는 속성이 있습니다. 이 코드 조각은 TextView에서 글꼴을 프로그래밍 방식으로 설정하는 방법을 보여 줍니다.

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

이 메서드는 GetFont 글꼴 패밀리 내에서 첫 번째 글꼴을 자동으로 로드합니다. 특정 스타일과 일치하는 글꼴을 로드하려면 메서드를 Typeface.Create 사용합니다. 이 메서드는 지정된 스타일과 일치하는 글꼴을 로드하려고 합니다. 예를 들어 이 코드 조각은 Resources/fonts에 정의된 글꼴 패밀리에서 굵 Typeface 은 개체를 로드하려고 합니다.

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

글꼴 다운로드

Android는 글꼴을 애플리케이션 리소스로 패키징하는 대신 원격 원본에서 글꼴을 다운로드할 수 있습니다. 이는 APK의 크기를 줄이는 바람직한 효과를 갖습니다.

글꼴 공급자의 도움을 받아 글꼴을 다운로드합니다. 디바이스의 모든 애플리케이션에 대한 글꼴 다운로드 및 캐싱을 관리하는 특수 콘텐츠 공급자입니다. Android 8.0에는 Google 글꼴 리포지토리에서 글꼴을 다운로드하는 글꼴 공급자가 포함되어 있습니다. 이 기본 글꼴 공급자는 Android 지원 라이브러리 v26을 사용하여 API 수준 14로 백포트됩니다.

앱에서 글꼴을 요청하면 글꼴 공급자가 먼저 검사 글꼴이 장치에 이미 있는지 확인합니다. 그렇지 않은 경우 글꼴을 다운로드하려고 시도합니다. 글꼴을 다운로드할 수 없는 경우 Android는 기본 시스템 글꼴을 사용합니다. 글꼴이 다운로드되면 초기 요청을 한 앱뿐만 아니라 디바이스의 모든 애플리케이션에서 사용할 수 있습니다.

글꼴 다운로드를 요청하는 경우 앱은 글꼴 공급자를 직접 쿼리하지 않습니다. 대신 앱은 API 인스턴스 FontsContract 를 사용합니다(또는 FontsContractCompat 지원 라이브러리 26을 사용하는 경우).

Android 8.0은 다음과 같은 두 가지 방법으로 글꼴 다운로드를 지원합니다.

  1. 다운로드 가능한 글꼴을 리소스 로 선언 – 앱은 XML 리소스 파일을 통해 Android에 다운로드 가능한 글꼴을 선언할 수 있습니다. 이러한 파일에는 앱이 시작될 때 Android에서 글꼴을 비동기적으로 다운로드하고 디바이스에서 캐시해야 하는 모든 메타 데이터가 포함됩니다.
  2. 프로그래밍 방식 – Android API 수준 26의 API를 사용하면 애플리케이션이 실행되는 동안 애플리케이션이 프로그래밍 방식으로 글꼴을 다운로드할 수 있습니다. 앱은 지정된 글꼴에 대한 개체를 만들고 FontRequest 이 개체를 클래스에 FontsContract 전달합니다. 글 FontsContract 꼴 공급자에서 FontRequest글꼴을 가져와서 검색합니다. Android는 글꼴을 동기적으로 다운로드합니다. 만들기 예제는 FontRequest 이 가이드의 뒷부분에 나와 있습니다.

사용되는 방법에 관계없이 글꼴을 다운로드하기 전에 Xamarin.Android 애플리케이션에 추가해야 하는 리소스 파일입니다. 먼저 글꼴 패밀리의 일부로 Resources/font 디렉터리의 XML 파일에서 글꼴 을 선언해야 합니다. 이 코드 조각은 Android 8.0(또는 지원 라이브러리 v26)과 함께 제공되는 기본 글꼴 공급자를 사용하여 Google Fonts 오픈 소스 컬렉션에서 글꼴을 다운로드하는 방법의 예입니다.

<?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에서 글꼴을 다운로드하는 데 필요한 정보를 선언하는 다음 특성이 포함됩니다.

  1. fontProviderAuthority – 요청에 사용할 글꼴 공급자의 권한입니다.
  2. fontPackage – 요청에 사용할 글꼴 공급자의 패키지입니다. 공급자의 ID를 확인하는 데 사용됩니다.
  3. fontQuery – 글꼴 공급자가 요청된 글꼴을 찾는 데 도움이 되는 문자열입니다. 글꼴 쿼리에 대한 세부 정보는 글꼴 공급자에 따라 다릅니다. 다운로드 가능한 글꼴 샘플 앱의 클래스는 QueryBuilder Google 글꼴 오픈 소스 컬렉션의 글꼴에 대한 쿼리 형식에 대한 몇 가지 정보를 제공합니다.
  4. fontProviderCerts – 공급자가 서명해야 하는 인증서에 대한 해시 집합 목록이 있는 리소스 배열입니다.

글꼴이 정의되면 다운로드와 관련된 글꼴 인증서대한 정보를 제공해야 할 수 있습니다.

글꼴 인증서

글꼴 공급자가 디바이스에 미리 설치되지 않았거나 앱이 라이브러리를 Xamarin.Android.Support.Compat 사용하는 경우 Android에는 글꼴 공급자의 보안 인증서가 필요합니다. 이러한 인증서는 Resources/values 디렉터리에 보관되는 배열 리소스 파일에 나열됩니다.

예를 들어 다음 XML의 이름은 Resources/values/fonts_cert.xml Google 글꼴 공급자에 대한 인증서를 저장합니다.

<?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>

이러한 리소스 파일을 배치하면 앱에서 글꼴을 다운로드할 수 있습니다.

다운로드 가능한 글꼴을 리소스로 선언

다운로드 가능한 글꼴을 AndroidManifest.XML 나열하면 Android는 앱이 처음 시작될 때 글꼴을 비동기적으로 다운로드합니다. 글꼴 자체는 다음과 유사하게 배열 리소스 파일에 나열됩니다.

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

이러한 글꼴을 다운로드하려면 요소의 application 자식으로 추가하여 meta-data AndroidManifest.XML 선언해야 합니다. 예를 들어 다운로드 가능한 글꼴이 Resources/values/downloadable_fonts.xml 리소스 파일에 선언된 경우 이 코드 조각을 매니페스트에 추가해야 합니다.

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

글꼴 API를 사용하여 글꼴 다운로드

개체를 인스턴스화하고 메서드에 전달하여 글꼴을 FontRequest 프로그래밍 방식으로 다운로드할 수 FontContractCompat.RequestFont 있습니다. 메서드는 FontContractCompat.RequestFont 먼저 디바이스에 글꼴이 있는지 확인하기 위해 검사 다음 필요한 경우 글꼴 공급자를 비동기적으로 쿼리하고 앱의 글꼴을 다운로드합니다. 글꼴을 다운로드할 수 없는 경우 FontRequest Android는 기본 시스템 글꼴을 사용합니다.

FontRequest 개체에는 글꼴 공급자가 글꼴을 찾아 다운로드하는 데 사용할 정보가 포함됩니다. A FontRequest 에는 다음 네 가지 정보가 필요합니다.

  1. 글꼴 공급자 기관 – 요청에 사용할 글꼴 공급자의 권한입니다.
  2. 글꼴 패키지 – 요청에 사용할 글꼴 공급자의 패키지입니다. 공급자의 ID를 확인하는 데 사용됩니다.
  3. 글꼴 쿼리 – 글꼴 공급자가 요청된 글꼴을 찾는 데 도움이 되는 문자열입니다. 글꼴 쿼리에 대한 세부 정보는 글꼴 공급자에 따라 다릅니다. 문자열의 세부 정보는 글꼴 공급자에 따라 다릅니다. 다운로드 가능한 글꼴 샘플 앱의 클래스는 QueryBuilder Google 글꼴 오픈 소스 컬렉션의 글꼴에 대한 쿼리 형식에 대한 몇 가지 정보를 제공합니다.
  4. 글꼴 공급자 인증서 – 공급자가 서명해야 하는 인증서에 대한 해시 집합 목록이 있는 리소스 배열입니다.

이 코드 조각은 새 FontRequest 개체를 인스턴스화하는 예제입니다.

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 오픈 소스 컬렉션의 글꼴에 도움이 되는 쿼리입니다.

메서드에 FontRequest 전달하기 FontContractCompat.RequestFont 전에 만들어야 하는 두 개체가 있습니다.

  • FontsContractCompat.FontRequestCallback – 확장해야 하는 추상 클래스입니다. 완료될 때 RequestFont 호출되는 콜백입니다. Xamarin.Android 앱은 각각 다운로드가 실패하거나 성공할 때 수행할 작업을 제공하여 하위 클래스 FontsContractCompat.FontRequestCallbackOnTypefaceRequestFailedOnTypefaceRetrieved재정의해야 합니다.
  • HandlerHandler– 필요한 경우 스레드에서 글꼴을 다운로드하는 데 사용됩니다RequestFont. 글꼴은 UI 스레드에서 다운로드하면 안 됩니다.

이 코드 조각은 Google Fonts 오픈 소스 컬렉션에서 글꼴을 비동기적으로 다운로드하는 C# 클래스의 예입니다. 인터페이스를 FontRequestCallback 구현하고 완료되면 C# 이벤트를 FontRequest 발생합니다.

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 도우미가 만들어지고 이벤트 처리기가 할당됩니다.

var fontHelper = new FontDownloadHelper();

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

요약

이 가이드에서는 다운로드 가능한 글꼴 및 글꼴을 리소스로 지원하기 위해 Android 8.0의 새로운 API에 대해 설명했습니다. APK에 기존 글꼴을 포함하고 레이아웃에서 사용하는 방법에 대해 설명했습니다. 또한 Android 8.0에서 글꼴 공급자에서 프로그래밍 방식으로 또는 리소스 파일에서 글꼴 메타 데이터를 선언하여 글꼴 다운로드를 지원하는 방법에 대해서도 설명했습니다.