Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Font yang Dapat Didownload

Android 8.0 (API level 26) dan Android Support Library 26 memperkenalkan dukungan untuk API guna meminta font dari aplikasi penyedia alih-alih memaketkan file dalam APK atau membiarkan APK mendownload font. Fitur ini tersedia di perangkat yang menjalankan Android API versi 14 dan yang lebih tinggi melalui Support Library 26.

Fitur Font yang Dapat Didownload menawarkan manfaat sebagai berikut:

  • Mengurangi ukuran APK
  • Meningkatkan tingkat keberhasilan penginstalan aplikasi
  • Meningkatkan kesehatan sistem secara keseluruhan karena beberapa APK dapat berbagi font yang sama melalui penyedia. Tindakan ini akan menghemat data seluler pengguna, memori ponsel, dan kapasitas disk. Dalam model ini, font dikirim melalui jaringan jika diperlukan.

Lihat referensi terkait berikut ini:

  • Contoh aplikasi Font yang Dapat Didownload Java | Kotlin

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 1 mengilustrasikan prosesnya.

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:

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

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

Catatan: Perangkat harus memiliki layanan Google Play versi 11 atau yang lebih tinggi untuk menggunakan penyedia Google Fonts.

  1. Dalam Layout Editor, pilih TextView, lalu di bawah Properties, pilih fontFamily > More Fonts.
    Layout Editor
    Gambar 2. Menggunakan Layout editor

    Jendela Resource akan muncul.

  2. Dalam menu drop-down Source, pilih Google Fonts.
  3. Dalam kotak Fonts, pilih font.
  4. Pilih Create downloadable font, lalu klik OK.

    Catatan: Untuk memaketkan font di aplikasi Anda, pilih Add font to project.

    Layout editor
    Gambar 3. Memilih font dari jendela Resource
  5. Android Studio otomatis membuat file XML relevan yang diperlukan untuk merender font dengan benar di aplikasi Anda.

    Layout editor
    Gambar 4. Menampilkan pratinjau file font

Menggunakan Font yang Dapat Didownload secara terprogram

Sebelum Android 8.0 (API level 26), Support Library 26.0 menyediakan dukungan penuh untuk Font yang Dapat Didownload. Untuk informasi selengkapnya tentang cara menggunakan support library, buka bagian support library Font yang Dapat Didownload.

Untuk menggunakan fitur Font yang Dapat Didownload secara terprogram, Anda perlu berinteraksi dengan dua class utama:

  • android.graphics.fonts.FontRequest: Class ini memungkinkan Anda membuat permintaan font.
  • FontsContract: Class ini memungkinkan Anda membuat objek Typeface baru berdasarkan font yang diminta.

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

Untuk mendownload font, lakukan 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 Anda, seperti Google Fonts.
    • Daftar serangkaian hash untuk sertifikat guna memverifikasi identitas penyedia.

      Catatan: Tidak perlu menambahkan sertifikat jika Anda meminta font dari penyedia yang sudah diinstal sebelumnya. Namun, Anda harus memberikan sertifikat jika Anda meminta font melalui support library.

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

    Catatan: Anda dapat menerima nilai parameter dari penyedia font Anda. Android Studio otomatis mengisi nilai ini untuk penyedia yang didukung di UI-nya.

  2. Buat instance class FontsContract.FontRequestCallback.
  3. Ganti metode onTypefaceRetrieved() untuk menunjukkan bahwa permintaan font telah selesai. Masukkan font yang diambil sebagai parameter. Anda dapat menggunakan metode ini untuk menetapkan font, sesuai kebutuhan. Misalnya, Anda dapat menyetel font pada TextView
  4. Ganti metode onTypefaceRequestFailed() untuk menerima informasi tentang error dalam proses permintaan font. Untuk informasi selengkapnya tentang kode error, lihat error code constants.
  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 dari class Context
    • instance dari class android.graphics.fonts.FontRequest
    • callback untuk menerima hasil permintaan font
    • handler untuk mengambil font pada thread
    • Catatan: Pastikan handler tersebut bukan handler thread Antarmuka Pengguna.

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 Font yang Dapat Didownload Java | Kotlin.

Menggunakan Font yang Dapat Didownload melalui support library

Support Library 26 memberikan dukungan untuk fitur Font yang Dapat Didownload pada perangkat yang menjalankan Android API versi 14 atau yang lebih tinggi. Paket berisi class android.support.v4.provider FontsContractCompat dan FontRequest untuk mengimplementasikan dukungan fitur kompatibilitas mundur Font yang Dapat Didownload. Class support library berisi metode yang mirip dengan framework. Proses mendownload font juga mirip dengan yang disebutkan di bagian Mendownload font.

Untuk mendownload font dengan menggunakan support library, impor class FontsContractCompat dan FontRequest dari paket android.support.v4.provider. Buat instance untuk class ini, bukan class framework FontsContract dan android.graphics.fonts.FontRequest.

Catatan: Anda harus memberikan sertifikat saat meminta font melalui support library. Hal ini berlaku bahkan untuk penyedia font yang sudah diinstal sebelumnya.

Menambahkan dependensi support library

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

Untuk menambahkan support library ke project aplikasi Anda:

  1. Buka file build.gradle aplikasi Anda.
  2. Tambahkan support library ke bagian dependencies.
dependencies {
    ...
    compile "com.android.support:support-compat:28.0.0"
}

Menggunakan Font yang Dapat Didownload sebagai resource dalam XML

Android 8.0 (API level 26) dan Support Library 26 menawarkan cara yang lebih cepat dan praktis untuk mendeklarasikan font kustom sebagai resource dalam tata letak XML. Artinya, font tidak perlu dipaketkan 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 ditampilkan 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 pada file XML tata letak. Anda juga dapat menggunakan metode getFont() untuk mengambil file secara terprogram. Contoh, getFont(R.font.font_file_name).

Mendeklarasikan font di dalam manifes

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

Untuk melakukan pradeklarasi font dalam manifes, lakukan langkah-langkah berikut:

  1. Buat array resource dalam res/values/arrays.xml dan deklarasikan Font yang Dapat Didownload yang ingin Anda ambil lebih dulu.
  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.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

Menambahkan sertifikat

Jika penyedia font belum terinstal atau jika Anda menggunakan support library, Anda harus menyatakan sertifikat yang telah ditandatangani dengan penyedia font. Sistem menggunakan sertifikat untuk memverifikasi identitas penyedia font.

Catatan: Android Studio dapat otomatis mengisi nilai untuk penyedia layanan Google Play jika Anda menggunakan alat pemilih font di Android Studio. Untuk informasi selengkapnya tentang cara menggunakan Android Studio untuk mendownload font, buka bagian Menggunakan Font yang Dapat didownload melalui Android Studio dan layanan Google Play .

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"
    

    Catatan: Jika penyedia memiliki lebih dari satu set sertifikat, Anda dapat menentukan array dari string array.