Gunakan Font yang Dapat Didownload

Coba cara Compose
Jetpack Compose adalah toolkit UI yang direkomendasikan untuk Android. Pelajari cara menggunakan teks di Compose.

Fitur Font yang Dapat Didownload memungkinkan API meminta font dari aplikasi penyedia, bukan memaketkan file ke dalam aplikasi atau mengizinkan aplikasi mendownload font. Font yang Dapat Didownload tersedia di perangkat yang menjalankan Android API versi 14 dan yang lebih tinggi melalui library AndroidX Core.

Font yang Dapat Didownload menawarkan manfaat berikut:

  • Mengurangi ukuran aplikasi, sehingga meningkatkan tingkat keberhasilan penginstalan aplikasi.
  • Meningkatkan kesehatan sistem secara keseluruhan karena beberapa aplikasi dapat berbagi font yang sama melalui penyedia. Tindakan ini akan menghemat data seluler, memori ponsel, dan kapasitas disk pengguna. Dalam model ini, font diambil melalui jaringan jika diperlukan.
Untuk pengalaman langsung menggunakan Font yang Dapat Didownload, lihat aplikasi contoh DownloadableFonts.

Bagaimana cara kerja Font yang Dapat Didownload?

Penyedia font adalah aplikasi yang mengambil font dan membuat cache secara lokal sehingga aplikasi lain dapat meminta dan berbagi font. Gambar berikut mengilustrasikan prosesnya.

Gambar yang menunjukkan komponen utama dalam proses compat Emoji
Gambar 1. Proses Font yang Dapat Didownload.

Dasar-dasar

Anda dapat menggunakan fitur Font yang Dapat Didownload dengan cara berikut, yang akan dibahas secara mendetail di bagian selanjutnya:

Menggunakan Font yang Dapat Didownload dengan layanan Android Studio dan Google Play

Anda dapat menyetel aplikasi Anda untuk mendownload font dengan menggunakan Android Studio 3.0 atau yang lebih tinggi. Untuk membantu mulai menggunakan fitur Font yang Dapat Didownload, Anda dapat menggunakan penyedia font dari layanan Google Play.

  1. Di Layout Editor, pilih TextView. Lalu, di bagian Attributes, pilih fontFamily > More Fonts.
    Gambar yang menampilkan Layout Editor Android Studio
    Gambar 2. Menggunakan Layout Editor.
    Jendela Resource akan muncul.
  2. Di menu Sumber, pilih Google Fonts.
  3. Dalam kotak Fonts, pilih font di bagian area "Downloadable".
  4. Pilih Create downloading font, lalu klik OK.
    Gambar yang menunjukkan cara memilih font dari jendela Resource
    Gambar 3. Memilih font dari jendela Resources.
  5. Android Studio otomatis menghasilkan file XML relevan yang diperlukan untuk merender font dengan benar di aplikasi Anda.

    Gambar yang menunjukkan cara melihat pratinjau font
    Gambar 4. Melihat pratinjau file font.

Menggunakan Font yang Dapat Didownload secara terprogram

Mulai dari Android 8.0 (API level 26), AndroidX Core menyediakan dukungan penuh untuk Font yang Dapat Didownload. Untuk informasi selengkapnya tentang penggunaan library AndroidX Core, lihat bagian library AndroidX Core yang Dapat Didownload di halaman ini.

Untuk menggunakan fitur Font yang Dapat Didownload secara terprogram, lakukan interaksi dengan dua class utama:

Aplikasi Anda mengambil font dari penyedia font dengan menggunakan FontsContract API. Setiap penyedia memiliki serangkaian batasan sendiri pada versi Android dan bahasa kueri yang didukungnya. Untuk informasi selengkapnya tentang versi Android dan format kueri, lihat dokumentasi penyedia Anda.

Untuk mendownload font, selesaikan langkah-langkah berikut:

  1. Buat instance class android.graphics.fonts.FontRequest untuk meminta font dari penyedia. Untuk membuat permintaan, teruskan parameter berikut:
    • Otoritas penyedia font.
    • Paket penyedia font untuk memverifikasi identitas penyedia.
    • Kueri string font. Untuk informasi selengkapnya tentang format kueri, lihat dokumentasi penyedia font, seperti Google Fonts.
    • Daftar rangkaian hash untuk sertifikat guna memverifikasi identitas penyedia.

    Kotlin

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

    Java

    FontRequest request = new FontRequest("com.example.fontprovider",
                       "com.example.fontprovider", "my font", certs);
    
  2. Buat instance class FontsContract.FontRequestCallback.
  3. Ganti metode onTypefaceRetrieved() untuk menunjukkan bahwa permintaan font telah selesai. Berikan font yang diambil sebagai parameter. Anda dapat menggunakan metode ini untuk menyetel font sesuai kebutuhan. Misalnya, Anda dapat menetapkan font pada TextView.
  4. Ganti metode onTypefaceRequestFailed() untuk menerima informasi tentang error dalam proses permintaan font. Untuk mengetahui informasi selengkapnya tentang kode error, lihat konstanta kode error.
  5. Panggil metode FontsContract.requestFont() untuk mengambil font dari penyedia font. Metode ini memulai pemeriksaan untuk menentukan apakah font ada dalam cache. Jika font tidak tersedia secara lokal, metode akan memanggil penyedia font, mengambil font secara asinkron, dan meneruskan hasilnya ke callback. Teruskan parameter berikut:
    • Instance class Context
    • Instance class android.graphics.fonts.FontRequest
    • Callback untuk menerima hasil permintaan font
    • Pengendali untuk mengambil font pada thread

Kode contoh berikut mengilustrasikan proses Font yang Dapat Didownload secara keseluruhan:

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)

Java

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);

Untuk informasi selengkapnya tentang cara mendownload font dari penyedia font, lihat aplikasi contoh DownloadableFonts.

Menggunakan Font yang Dapat Didownload dengan AndroidX Core

AndroidX Core menyediakan dukungan untuk fitur Font yang Dapat Didownload pada perangkat yang menjalankan Android API versi 14 atau yang lebih tinggi. Paket androidx.core.provider berisi class FontsContractCompat dan FontRequest untuk mengimplementasikan dukungan fitur Font yang Dapat Didownload yang kompatibel dengan versi lama. Class AndroidX berisi metode yang mirip dengan metode framework, dan proses untuk mendownload font mirip dengan yang dijelaskan di bagian halaman ini tentang menggunakan Font yang Dapat Didownload secara terprogram.

Untuk mendownload font menggunakan AndroidX, impor class FontsContractCompat dan FontRequest dari paket androidx.core.provider. Buat instance class ini, bukan class framework FontsContract dan android.graphics.fonts.FontRequest.

Menambahkan dependensi AndroidX Core

Untuk menggunakan class FontsContractCompat dan FontRequest, Anda harus mengubah dependensi classpath project aplikasi dalam lingkungan pengembangan Anda.

Untuk menambahkan AndroidX Core ke project aplikasi Anda, tambahkan dependensi berikut ke file build.gradle aplikasi:

Groovy

dependencies {
    ...
    implementation "androidx.core:core-ktx:2.2.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:2.2.0")
}

Menggunakan Font yang Dapat Didownload sebagai resource dalam XML

Android 8.0 (API level 26) dan AndroidX Core menawarkan cara yang lebih cepat dan praktis untuk mendeklarasikan font kustom sebagai resource dalam tata letak XML. Ini berarti Anda tidak perlu memaketkan font sebagai aset. Anda dapat menentukan font kustom untuk seluruh tema, yang mempercepat kegunaan untuk beberapa bobot dan gaya, seperti tebal, sedang, atau ringan, jika disediakan.

  1. Buat file XML baru di folder res/font.
  2. Tambahkan elemen root <font-family> dan tetapkan atribut terkait font, seperti yang ditunjukkan dalam contoh file XML berikut:
  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. Lihat file sebagai @font/font_file_name dalam file XML tata letak. Anda juga dapat menggunakan metode getFont() untuk mengambil file secara terprogram, seperti getFont(R.font.font_file_name).

Mendeklarasikan font di awal dalam manifes

Perluasan tata letak dan pengambilan resource adalah tugas tersinkron. Secara default, upaya pertama untuk mengambil font akan memicu permintaan ke penyedia font, sehingga akan meningkatkan waktu tata letak pertama. Untuk menghindari penundaan, Anda dapat mendeklarasikan di awal font yang perlu diambil dalam manifes. Setelah sistem mengambil font dari penyedia, font akan segera tersedia. Jika pengambilan font memakan waktu lebih lama dari yang diperkirakan, sistem akan membatalkan proses pengambilan dan menggunakan font default.

Untuk mendeklarasikan font di awal dalam manifes, selesaikan langkah-langkah berikut:

  1. Buat array resource di res/values/arrays.xml dan deklarasikan font yang ingin Anda ambil data lebih dahulu.
  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. Gunakan tag meta-data untuk mendeklarasikan array resource dalam manifes Anda.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

Tambahkan sertifikat

Jika penyedia font tidak diprainstal, atau jika Anda menggunakan library AndroidX Core, deklarasikan sertifikat yang ditandatangani dengan penyedia font. Sistem menggunakan sertifikat untuk memverifikasi identitas penyedia font.

Lakukan langkah-langkah berikut untuk menambahkan sertifikat:

  1. Buat array string dengan detail sertifikat. Untuk informasi selengkapnya tentang detail sertifikat, lihat dokumentasi penyedia font Anda.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. Tetapkan atribut fontProviderCerts ke array.
  4. android:fontProviderCerts="@array/certs"
    

Font yang Dapat Didownload di Compose

Mulai Compose 1.2-alpha07, Anda dapat menggunakan Downloadable Fonts API di aplikasi Compose untuk mendownload Google Fonts secara asinkron dan menggunakannya di aplikasi Anda. Untuk informasi selengkapnya, lihat dokumentasi Compose yang Dapat Didownload Fonts.