Sử dụng phông chữ có thể tải xuống

Thử cách Compose
Jetpack Compose là bộ công cụ giao diện người dùng được đề xuất cho Android. Tìm hiểu cách sử dụng văn bản trong Compose.

Tính năng Phông chữ có thể tải xuống cho phép API yêu cầu phông chữ từ ứng dụng của nhà cung cấp thay vì gói tệp vào ứng dụng hoặc cho phép ứng dụng tải phông chữ xuống. Phông chữ có thể tải xuống có trên thiết bị chạy API Android phiên bản 14 trở lên thông qua thư viện AndroidX Core.

Phông chữ có thể tải xuống mang lại các lợi ích sau:

  • Giảm kích thước ứng dụng, từ đó tăng tỷ lệ cài đặt thành công ứng dụng.
  • Cải thiện tình trạng tổng thể của hệ thống, vì nhiều ứng dụng có thể dùng chung một phông chữ thông qua một Google Cloud. Việc này giúp người dùng tiết kiệm dữ liệu di động, bộ nhớ điện thoại và dung lượng ổ đĩa. Trong mô hình này, phông chữ được tìm nạp qua mạng khi cần.
Để có trải nghiệm thực tế với Phông chữ có thể tải xuống, hãy xem Phông chữ có thể tải xuống ứng dụng mẫu.

Phông chữ có thể tải xuống hoạt động như thế nào?

Trình cung cấp phông chữ là một ứng dụng truy xuất phông chữ và lưu vào bộ nhớ đệm trên máy để các ứng dụng khác có thể yêu cầu và chia sẻ phông chữ. Hình dưới đây minh hoạ quy trình này.

Hình ảnh cho thấy các thành phần chính trong quy trình tương thích với biểu tượng cảm xúc
Hình 1. Quá trình phông chữ có thể tải xuống.

Thông tin cơ bản

Bạn có thể sử dụng tính năng Phông chữ có thể tải xuống theo các cách sau (sẽ được thảo luận chi tiết) trong các phần sau:

Sử dụng phông chữ có thể tải xuống với Android Studio và các dịch vụ của Google Play

Bạn có thể thiết lập ứng dụng của mình để tải phông chữ xuống bằng cách sử dụng Android Studio 3.0 trở lên. Để giúp bạn bắt đầu sử dụng các tính năng Phông chữ có thể tải xuống, bạn có thể dùng trình cung cấp phông chữ trên Google Play luôn miễn phí.

  1. Trong Layout Editor, hãy chọn một TextView. Sau đó, trong Thuộc tính, chọn fontFamily > Phông chữ khác.
    Hình ảnh cho thấy Layout Editor của Android Studio
    Hình 2. Sử dụng Layout Editor.
    Cửa sổ Resources (Tài nguyên) sẽ xuất hiện.
  2. Trong trình đơn Source (Nguồn), hãy chọn Google Fonts (Phông chữ của Google).
  3. Trong hộp Fonts (Phông chữ), hãy chọn một phông chữ trong cửa sổ "Downloadable" (Có thể tải xuống) .
  4. Chọn Create downloadable font (Tạo phông chữ có thể tải xuống) và nhấp vào OK.
    Hình ảnh cho thấy cách chọn phông chữ trong cửa sổ Tài nguyên
    Hình 3. Chọn phông chữ trong cửa sổ Resources (Tài nguyên).
  5. Android Studio sẽ tự động tạo các tệp XML liên quan cần thiết để hiển thị phông chữ chính xác trong ứng dụng của bạn.

    Hình ảnh minh hoạ cách xem trước phông chữ
    Hình 4. Xem trước tệp phông chữ.

Sử dụng phông chữ có thể tải xuống theo phương thức lập trình

Kể từ Android 8.0 (API cấp 26), AndroidX Core hỗ trợ đầy đủ các Phông chữ có thể tải xuống. Cho biết thêm thông tin về cách sử dụng thư viện AndroidX Core, hãy xem Phần thư viện AndroidX Core có thể tải xuống trên trang này.

Để sử dụng tính năng Phông chữ có thể tải xuống theo phương thức lập trình, hãy tương tác với hai lớp chính:

Ứng dụng của bạn truy xuất phông chữ từ trình cung cấp phông chữ bằng cách sử dụng API FontsContract. Một có bộ hạn chế riêng đối với các phiên bản Android và ngôn ngữ truy vấn mà nó hỗ trợ. Cho biết thêm thông tin về các phiên bản Android và định dạng truy vấn, hãy tham khảo tài liệu.

Để tải phông chữ xuống, hãy hoàn tất các bước sau:

  1. Tạo một thực thể của lớp android.graphics.fonts.FontRequest để yêu cầu phông chữ của trình cung cấp. Để tạo yêu cầu, hãy truyền các thông số sau:
    • Quyền của trình cung cấp phông chữ.
    • Gói trình cung cấp phông chữ để xác minh danh tính của trình cung cấp
    • Truy vấn chuỗi phông chữ. Để biết thêm thông tin về các định dạng truy vấn, hãy xem phông chữ của bạn tài liệu của nhà cung cấp, chẳng hạn như Google Fonts (Phông chữ Google).
    • Danh sách tập hợp hàm băm cho các chứng chỉ để xác minh danh tính của trình cung cấp.

    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. Tạo một thực thể của FontsContract.FontRequestCallback .
  3. Ghi đè phương thức onTypefaceRetrieved()để cho biết yêu cầu phông chữ đã hoàn tất. Cung cấp phông chữ đã truy xuất dưới dạng tham số. Bạn có thể dùng phương thức này để đặt phông chữ nếu cần. Ví dụ: bạn có thể đặt phông chữ trên TextView.
  4. Ghi đè phương thức onTypefaceRequestFailed() để nhận thông tin về các lỗi trong quá trình yêu cầu phông chữ. Thông tin khác về mã lỗi, hãy tham khảo hằng số mã lỗi.
  5. Gọi phương thức FontsContract.requestFont() để truy xuất phông chữ từ phông chữ Google Cloud. Phương thức này sẽ bắt đầu một bước kiểm tra để xác định xem phông chữ có tồn tại trong bộ nhớ đệm hay không. Nếu phông chữ không có sẵn trên máy, trình cung cấp phông chữ, truy xuất phông chữ không đồng bộ và chuyển kết quả đến lệnh gọi lại. Truyền các tham số sau:
    • Một ví dụ của Context lớp
    • Một thực thể của lớp android.graphics.fonts.FontRequest
    • Lệnh gọi lại để nhận kết quả của yêu cầu phông chữ
    • Một trình xử lý để tìm nạp phông chữ trên một chuỗi

Mã mẫu sau minh hoạ toàn bộ quy trình Phông chữ có thể tải xuống:

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

Để biết thêm thông tin về cách tải phông chữ xuống từ một trình cung cấp phông chữ, hãy xem Phông chữ có thể tải xuống ứng dụng mẫu.

Sử dụng phông chữ có thể tải xuống với AndroidX Core

AndroidX Core hỗ trợ tính năng Phông chữ có thể tải xuống trên các thiết bị chạy Android API phiên bản 14 trở lên. Chiến lược phát hành đĩa đơn androidx.core.provider gói chứa các lớp FontsContractCompatFontRequest để triển khai hỗ trợ tính năng Phông chữ có thể tải xuống có khả năng tương thích ngược. Lớp AndroidX chứa các phương thức tương tự như các phương thức khung, và quá trình tải phông chữ xuống cũng tương tự như được mô tả trong phần trên trang này về bằng Phông chữ có thể tải xuống theo phương thức lập trình.

Để tải phông chữ xuống bằng AndroidX, hãy nhập FontsContractCompatFontRequest lớp trong gói androidx.core.provider. Sáng tạo thực thể của các lớp này thay vì FontsContract và Các lớp khung android.graphics.fonts.FontRequest.

Thêm phần phụ thuộc AndroidX Core

Để sử dụng các lớp FontsContractCompatFontRequest, bạn phải sửa đổi các phần phụ thuộc classpath của dự án ứng dụng trong môi trường phát triển.

Để thêm AndroidX Core vào dự án ứng dụng của bạn, hãy thêm phần phụ thuộc sau vào Tệp build.gradle:

Groovy

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

Kotlin

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

Sử dụng phông chữ có thể tải xuống làm tài nguyên trong XML

Android 8.0 (API cấp 26) và AndroidX Core cung cấp một cách nhanh và thuận tiện hơn để khai báo phông chữ tuỳ chỉnh dưới dạng tài nguyên trong bố cục XML. Điều này có nghĩa là bạn không cần phải gói phông chữ một nội dung. Bạn có thể xác định phông chữ tuỳ chỉnh cho toàn bộ giao diện của mình, giúp tăng khả năng sử dụng cho nhiều trọng số và kiểu dáng, chẳng hạn như đậm, trung bình hoặc nhạt, khi được cung cấp.

  1. Tạo tệp XML mới trong thư mục res/font.
  2. Thêm phần tử gốc <font-family> và thiết lập các thuộc tính liên quan đến phông chữ như như trong tệp XML mẫu sau:
  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. Tham chiếu tệp dưới dạng @font/font_file_name trong tệp XML bố cục. Bạn cũng có thể sử dụng getFont() để truy xuất tệp theo phương thức lập trình, chẳng hạn như getFont(R.font.font_file_name)

Khai báo trước phông chữ trong tệp kê khai

Việc tăng bố cục và truy xuất tài nguyên là các tác vụ đồng bộ. Theo mặc định, lần thử đầu tiên để truy xuất phông chữ sẽ kích hoạt yêu cầu đến trình cung cấp phông chữ, do đó tăng bố cục đầu tiên bất cứ lúc nào. Để tránh bị chậm trễ, bạn có thể khai báo trước phông chữ cần truy xuất trong tệp kê khai. Sau khi hệ thống truy xuất phông chữ từ trình cung cấp, bạn có thể sử dụng phông chữ đó ngay lập tức. Nếu phông chữ quá trình truy xuất mất nhiều thời gian hơn dự kiến, hệ thống huỷ quá trình tìm nạp và sử dụng giá trị mặc định của bạn.

Để khai báo trước phông chữ trong tệp kê khai, hãy hoàn tất các bước sau:

  1. Tạo một mảng tài nguyên trong res/values/arrays.xml và khai báo phông chữ mà bạn muốn tìm nạp trước.
  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. Sử dụng thẻ meta-data để khai báo mảng tài nguyên trong tệp kê khai.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

Thêm chứng chỉ

Khi trình cung cấp phông chữ chưa được cài đặt trước hoặc nếu bạn đang dùng thư viện AndroidX Core, hãy khai báo các chứng chỉ mà trình cung cấp phông chữ được ký. Hệ thống sử dụng các chứng chỉ này để xác minh danh tính của trình cung cấp phông chữ.

Thực hiện các bước sau để thêm chứng chỉ:

  1. Tạo một dải chuỗi có chứa thông tin chi tiết về chứng chỉ. Để biết thêm thông tin về chứng chỉ hãy tham khảo tài liệu của trình cung cấp phông chữ.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. Đặt thuộc tính fontProviderCerts cho dãi.
  4. android:fontProviderCerts="@array/certs"
    

Phông chữ có thể tải xuống trong Compose

Bắt đầu sau Compose 1.2-alpha07, bạn có thể dùng API Phông chữ có thể tải xuống trong ứng dụng Compose để tải xuống Google Fonts theo cách không đồng bộ và sử dụng các phông chữ này trong ứng dụng của bạn. Cho để biết thêm thông tin, hãy xem Tài liệu về Phông chữ có thể tải xuống của Compose.