Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

다운로드 가능한 글꼴

Android 8.0(API 수준 26)과 Android 지원 라이브러리 26에는 파일을 APK에 번들로 묶거나 APK 다운로드 글꼴을 허용하는 대신 제공업체 애플리케이션에서 글꼴을 요청하는 API 지원이 도입되었습니다. 이 기능은 지원 라이브러리 26을 통해 Android API 버전 14 이상을 실행하는 기기에서 사용할 수 있습니다.

다운로드 가능한 글꼴 기능은 다음과 같은 이점을 제공합니다.

  • APK 크기 줄이기
  • 앱 설치 성공률 높이기
  • 여러 APK에서 제공업체를 통해 동일한 글꼴을 공유할 수 있어 전반적인 시스템 상태 개선. 이렇게 하여 사용자 모바일 데이터, 휴대전화 메모리, 디스크 공간을 절약합니다. 이 모델에서는 필요할 때 네트워크를 통해 글꼴을 가져옵니다.

다음 관련 리소스를 참조하세요.

다운로드 가능한 글꼴은 어떻게 작동하나요?

글꼴 제공업체는 글꼴을 검색하고 로컬에서 캐시하여 다른 앱이 글꼴을 요청 및 공유할 수 있게 해주는 애플리케이션입니다. 그림 1은 이 프로세스를 보여줍니다.

이모티콘 호환성 프로세스의 기본 구성요소
그림 1. 다운로드 가능한 글꼴 프로세스

기본 사항

다운로드 가능한 글꼴 기능은 다음과 같은 방법으로 사용할 수 있습니다.

Android 스튜디오 및 Google Play 서비스를 통해 다운로드 가능한 글꼴 사용

Android 스튜디오 3.0 이상을 사용하여 애플리케이션에서 글꼴을 다운로드하도록 설정할 수 있습니다. 다운로드 가능한 글꼴 기능을 시작하려면 Google Play 서비스의 글꼴 제공업체를 사용해 보세요.

참고: Google Fonts 제공업체를 사용하려면 기기에 Google Play 서비스 버전 11 이상이 있어야 합니다.

  1. Layout Editor에서 TextView를 선택하고 Properties에서 fontFamily > More Fonts를 선택
    Layout Editor
    그림 2. 레이아웃 편집기 사용

    Resources 창이 표시됩니다.

  2. Source 드롭다운 목록에서 Google Fonts를 선택
  3. Fonts 상자에서 글꼴 선택
  4. Create downloadable font를 선택하고 OK 클릭

    참고: 앱에 글꼴을 번들로 묶으려면 Add font to project를 선택합니다.

    레이아웃 편집기
    그림 3. 리소스 창에서 글꼴 선택
  5. Android 스튜디오는 앱에서 글꼴을 올바르게 렌더링하는 데 필요한 관련 XML 파일을 자동으로 생성합니다.

    레이아웃 편집기
    그림 4. 글꼴 파일 미리보기

프로그래매틱 방식으로 다운로드 가능한 글꼴 사용

Android 8.0(API 수준 26) 이전에는 지원 라이브러리 26.0이 다운로드 가능한 글꼴을 완벽하게 지원합니다. 지원 라이브러리 사용에 관한 자세한 내용은 다운로드 가능한 글꼴 지원 라이브러리 섹션을 참조하세요.

프로그래매틱 방식으로 다운로드 가능한 글꼴 기능을 사용하려면 두 가지 주요 클래스와 상호작용해야 합니다.

  • android.graphics.fonts.FontRequest: 이 클래스로 글꼴 요청을 만들 수 있습니다.
  • FontsContract: 이 클래스로 글꼴 요청에 기반한 새로운 Typeface 객체를 만들 수 있습니다.

앱에서 FontsContract API를 사용하여 글꼴 제공업체에서 글꼴을 검색합니다. 각 제공업체는 지원하는 Android 버전 및 쿼리 언어에 관한 자체 제한사항이 있습니다. Android 버전 및 쿼리 형식에 관한 자세한 내용은 제공업체의 문서를 참조하세요.

글꼴을 다운로드하려면 다음 단계를 따르세요.

  1. android.graphics.fonts.FontRequest 클래스의 인스턴스를 만들어 제공업체에 글꼴을 요청합니다. 요청을 만들려면 다음 매개변수를 전달합니다.
    • 글꼴 제공업체 권한
    • 제공업체의 ID를 확인하기 위한 글꼴 제공업체 패키지
    • 글꼴의 문자열 쿼리 쿼리 형식에 관한 자세한 내용은 Google Fonts와 같은 글꼴 제공업체의 문서를 참조하세요.
    • 제공업체의 ID를 확인하는 인증서의 해시 세트 목록

      참고: 사전 설치된 제공업체에 글꼴을 요청하는 경우 인증서를 추가할 필요가 없습니다. 그러나 지원 라이브러리를 통해 글꼴을 요청한다면 항상 인증서를 제공해야 합니다.

    Kotlin

    val request = FontRequest(
            "com.example.fontprovider.authority",
            "com.example.fontprovider",
            "my font",
            certs
    )
    

    자바

    FontRequest request = new FontRequest("com.example.fontprovider",
                       "com.example.fontprovider", "my font", certs);
    

    참고: 글꼴 제공업체에서 매개변수 값을 수신할 수 있습니다. Android 스튜디오는 UI에서 지원하는 제공업체에 대해서는 이 값을 자동으로 채웁니다.

  2. FontsContract.FontRequestCallback 클래스의 인스턴스를 만듭니다.
  3. onTypefaceRetrieved() 메서드를 재정의하여 글꼴 요청이 완료된 것을 표시합니다. 검색된 글꼴을 매개변수로 제공합니다. 필요에 따라 이 메서드를 사용하여 글꼴을 설정할 수 있습니다. 예를 들어 TextView에서 글꼴을 설정할 수 있습니다.
  4. onTypefaceRequestFailed() 메서드를 재정의하여 글꼴 요청 프로세스의 오류에 관한 정보를 수신합니다. 오류 코드에 관한 자세한 내용은 error code constants를 참조하세요.
  5. FontsContract.requestFont() 메서드를 호출하여 글꼴 제공업체에서 글꼴을 검색합니다. 이 메서드는 글꼴이 캐시에 있는지 확인하기 위해 검사를 시작합니다. 글꼴을 로컬에서 사용할 수 없는 경우 글꼴 제공업체를 호출하고 비동기적으로 글꼴을 검색하여 그 결과를 콜백에 전달합니다. 다음 매개변수를 전달합니다.
    • Context 클래스의 인스턴스
    • android.graphics.fonts.FontRequest 클래스의 인스턴스
    • 글꼴 요청의 결과를 수신하는 콜백
    • 스레드에서 글꼴을 가져오는 핸들러
    • 참고: 이 핸들러가 사용자 인터페이스 스레드 핸들러가 아닌지 확인하세요.

다음 샘플 코드는 다운로드 가능한 글꼴의 전체 프로세스를 보여줍니다.

Kotlin

val request = FontRequest(
        "com.example.fontprovider.authority",
        "com.example.fontprovider",
        "my font",
        certs
)
val callback = object : FontsContract.FontRequestCallback() {

    override fun onTypefaceRetrieved(typeface: Typeface) {
        // Your code to use the font goes here
        ...
    }

    override fun onTypefaceRequestFailed(reason: Int) {
        // Your code to deal with the failure goes here
        ...
    }
}
FontsContract.requestFonts(context, request, handler, null, callback)

자바

FontRequest request = new FontRequest("com.example.fontprovider.authority",
        "com.example.fontprovider", "my font", certs);
FontsContract.FontRequestCallback callback =
    new FontsContract.FontRequestCallback() {
        @Override
        public void onTypefaceRetrieved(Typeface typeface) {
            // Your code to use the font goes here
            ...
        }

        @Override
        public void onTypefaceRequestFailed(int reason) {
            // Your code to deal with the failure goes here
            ...
        }
};
FontsContract.requestFonts(context, request, handler, null, callback);

글꼴 제공업체에서 글꼴을 다운로드하는 방법에 관한 자세한 내용은 다운로드 가능한 글꼴 샘플 앱 자바 | Kotlin을 참조하세요.

지원 라이브러리를 통해 다운로드 가능한 글꼴 사용

지원 라이브러리 26은 Android API 버전 14 이상을 실행하는 기기에서 다운로드 가능한 글꼴 기능을 지원합니다. android.support.v4.provider 패키지에는 FontsContractCompatFontRequest 클래스가 포함되어 이전 버전과 호환되는 다운로드 가능한 글꼴 기능 지원을 구현합니다. 지원 라이브러리 클래스에는 프레임워크와 유사한 메서드가 포함되어 있습니다. 글꼴을 다운로드하는 프로세스도 글꼴 다운로드 섹션에서 언급한 프로세스와 유사합니다.

지원 라이브러리를 사용하여 글꼴을 다운로드하려면 android.support.v4.provider 패키지에서 FontsContractCompatFontRequest 클래스를 가져옵니다. FontsContractandroid.graphics.fonts.FontRequest 프레임워크 클래스가 아닌 이러한 클래스의 인스턴스를 만듭니다.

참고: 지원 라이브러리를 통해 글꼴을 요청할 때는 인증서를 제공해야 합니다. 사전 설치된 글꼴 제공업체에도 적용되는 사항입니다.

지원 라이브러리 종속 항목 추가

FontsContractCompatFontRequest 클래스를 사용하려면 개발 환경 내에서 앱 프로젝트의 클래스 경로 종속 항목을 수정해야 합니다.

지원 라이브러리를 애플리케이션 프로젝트에 추가하려면 다음 단계를 따르세요.

  1. 애플리케이션의 build.gradle 파일을 엽니다.
  2. 지원 라이브러리를 dependencies 섹션에 추가합니다.
dependencies {
    ...
    compile "com.android.support:support-compat:28.0.0"
}

다운로드 가능한 글꼴을 XML에서 리소스로 사용

Android 8.0(API 수준 26) 및 지원 라이브러리 26은 맞춤 글꼴을 XML 레이아웃에서 리소스로 선언하는 더 빠르고 편리한 방법을 제공합니다. 즉, 글꼴을 애셋으로 번들할 필요가 없습니다. 전체 테마에 맞춤 글꼴을 정의하여 굵게, 보통, 연하게 등 여러 두께 및 스타일의 사용성을 촉진할 수 있습니다.

  1. 새로운 XML 파일을 res/font 폴더에 만듭니다.
  2. <font-family> 루트 요소를 추가하고 다음 샘플 XML 파일과 같이 글꼴 관련 속성을 설정합니다.
  3. <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
            android:fontProviderAuthority="com.example.fontprovider.authority"
            android:fontProviderPackage="com.example.fontprovider"
            android:fontProviderQuery="example font"
            android:fontProviderCerts="@array/certs">
    </font-family>
    
  4. 레이아웃 XML 파일에서 @font/font_file_name으로 파일을 참조합니다. getFont() 메서드를 사용하여 프로그래매틱 방식으로 파일을 검색할 수도 있습니다. 예: getFont(R.font.font_file_name).

매니페스트에서 글꼴 미리 선언

레이아웃 인플레이션 및 리소스 검색은 동기 작업입니다. 기본적으로 첫 번째 글꼴 검색 시도는 글꼴 제공업체 요청을 트리거하므로 첫 번째 레이아웃 시간이 늘어납니다. 지연을 방지하려면 매니페스트에서 검색이 필요한 글꼴을 미리 선언할 수 있습니다. 시스템이 제공업체에서 글꼴을 검색하고 나면 글꼴을 즉시 사용할 수 있습니다. 글꼴 검색이 예상보다 오래 걸리면 시스템에서 가져오기 프로세스를 취소하고 기본 글꼴을 사용합니다.

매니페스트에서 글꼴을 미리 선언하려면 다음 단계를 따르세요.

  1. res/values/arrays.xml에서 리소스 배열을 만들고 미리 가져오려는 다운로드 가능한 글꼴을 선언합니다.
  2. res/values/arrays.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="preloaded_fonts">
            <item>@font/font1</item>
            <item>@font/font2</item>
        </array>
    </resources>
    
  3. meta-data 태그를 사용하여 매니페스트에서 리소스 배열을 선언합니다.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

인증서 추가

글꼴 제공업체가 사전 설치되어 있지 않거나 지원 라이브러리를 사용하는 경우 글꼴 제공업체가 서명한 인증서를 선언해야 합니다. 시스템은 인증서를 사용하여 글꼴 제공업체의 ID를 확인합니다.

참고: Android 스튜디오에서 글꼴 선택기 도구를 사용한다면 Android 스튜디오는 Google Play 서비스 제공업체의 값을 자동으로 채울 수 있습니다. Android 스튜디오를 사용하여 글꼴을 다운로드하는 방법에 관한 자세한 내용은 Android 스튜디오 및 Google Play 서비스를 통해 다운로드 가능한 글꼴 사용 섹션을 참조하세요.

인증서를 추가하려면 다음 단계를 따르세요.

  1. 인증서 세부정보가 있는 문자열 배열을 만듭니다. 인증서 세부정보에 관한 자세한 내용은 글꼴 제공업체의 문서를 참조하세요.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. fontProviderCerts 속성을 배열로 설정합니다.
  4. android:fontProviderCerts="@array/certs"
    

    참고: 제공업체에 인증서 세트가 두 개 이상 있다면 문자열 배열의 배열을 정의할 수 있습니다.