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

Android 8.0 (API cấp 26) và Thư viện hỗ trợ Android 26 giới thiệu tính năng hỗ trợ để các API yêu cầu phông chữ từ ứng dụng trì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. Tính năng này có trên các thiết bị chạy API Android phiên bản 14 trở lên thông qua Thư viện hỗ trợ 26.

Tính năng 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, do đó tăng tỷ lệ cài đặt ứng dụng thành cô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ể chia sẻ cùng một phông chữ thông qua một trình cung cấp. 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ữ sẽ được tìm nạp qua mạng khi cần.

Hãy tham khảo các tài nguyên liên quan sau:

  • Ứng dụng mẫu Phông chữ có thể tải xuống Java | Kotlin

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 1 minh hoạ quy trình.

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

Thông tin cơ bản

Bạn có thể dùng tính năng Phông chữ có thể tải xuống theo các cách sau:

Sử dụng phông chữ có thể tải xuống qua 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 tính năng Phông chữ có thể tải xuống, bạn có thể sử dụng trình cung cấp phông chữ trên các dịch vụ Google Play.

Lưu ý: Để sử dụng trình cung cấp Google Fonts (Phông chữ Google), thiết bị phải có Dịch vụ Google Play phiên bản 11 trở lên.

  1. Trong Layout Editor (Trình chỉnh sửa bố cục), hãy chọn TextView, sau đó chọn Properties (Thuộc tính), sau đó chọn fontFamily > More Fonts (fontFamily > Phông chữ khác).
    Layout Editor (Trình chỉnh sửa bố cục)
    Hình 2. Sử dụng Layout editor (Trình chỉnh sửa bố cục)

    Cửa sổ Resources (Tài nguyên) sẽ xuất hiện.

  2. Trong danh sách thả xuống 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ữ.
  4. Chọn Create downloadable font (Tạo phông chữ có thể tải xuống) và nhấp vào OK.

    Lưu ý: Để đóng gói phông chữ trong ứng dụng, hãy chọn Add font to project (Thêm phông chữ vào dự án).

    Layout Editor (Trình chỉnh sửa bố cục)
    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.

    Layout Editor (Trình chỉnh sửa bố cục)
    Hình 4. Xem trước tệp phông chữ

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

Trước phiên bản Android 8.0 (API cấp 26), Thư viện hỗ trợ 26.0 hỗ trợ đầy đủ các Phông chữ có thể tải xuống. Để biết thêm thông tin về cách sử dụng thư viện hỗ trợ, hãy chuyển tới phần Downloadable Fonts (Phông chữ có thể tải xuống) trong Thư viện hỗ trợ.

Để 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, bạn cần tương tác với hai lớp chính sau đây:

  • android.graphics.fonts.FontRequest: Lớp học này cho phép bạn tạo yêu cầu phông chữ.
  • FontsContract: Lớp học này cho phép bạn tạo một đối tượng Typeface mới dựa trên yêu cầu phông chữ.

Ứ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ỗi trình cung cấp có bộ hạn chế riêng với các phiên bản Android và ngôn ngữ truy vấn mà nó hỗ trợ. Để 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 của trình cung cấp.

Để tải phông chữ xuống, hãy thực hiện các bước sau:

  1. Tạo một bản sao của lớp android.graphics.fonts.FontRequest để yêu cầu phông chữ từ trình cung cấp. Để tạo một yêu cầu, hãy chuyể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 tài liệu trình cung cấp phông chữ, chẳng hạn như Google Fonts.
    • 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.

      Lưu ý: Bạn không cần thêm chứng chỉ nếu yêu cầu phông chữ từ các trình cung cấp đã cài đặt sẵn. Tuy nhiên, bạn phải luôn cung cấp chứng chỉ nếu yêu cầu phông chữ thông qua thư viện hỗ trợ.

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

    Lưu ý: Bạn có thể nhận giá trị thông số từ trình cung cấp phông chữ. Android Studio sẽ tự động điền những giá trị này cho các trình cung cấp mà nó hỗ trợ trong giao diện người dùng.

  2. Tạo một bản sao của lớp 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 như thông số. Bạn có thể sử dụng phương pháp 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ữ. Để biết thêm thông tin về mã lỗi, hãy tham khảo error code constants.
  5. Gọi phương thức FontsContract.requestFont() để truy xuất phông chữ từ trình cung cấp phông chữ. Phương thức này sẽ khởi chạy một quy trình kiểm tra để xác định xem có phông chữ trong bộ nhớ đệm hay không. Nếu phông chữ không có sẵn trong cục bộ, nó sẽ gọi trình cung cấp phông chữ, truy xuất phông chữ một cách không đồng bộ và chuyển kết quả đến lệnh gọi lại. Chuyển các tham số sau:
    • một bản sao của lớp Context
    • một bản sao của lớp android.graphics.fonts.FontRequest
    • một 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 (thread)
    • Lưu ý: Hãy đảm bảo trình xử lý này không phải là trình xử lý chuỗi Giao diện người dùng.

Mã mẫu sau đây minh hoạ quy trình chung về 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ừ trình cung cấp phông chữ, xem ứng dụng mẫu Phông chữ có thể tải xuống Java | Kotlin.

Sử dụng phông chữ có thể tải xuống qua thư viện hỗ trợ

Thư viện hỗ trợ 26 hỗ trợ tính năng Phông chữ có thể tải xuống trên các thiết bị chạy API Android phiên bản 14 trở lên. Gói android.support.v4.provider chứa các lớp FontsContractCompatFontRequest để triển khai chức năng hỗ trợ tính năng Phông chữ có thể tải xuống tương thích ngược. Các lớp thư viện hỗ trợ chứa các phương thức tương tự như khung. Quy trình tải phông chữ xuống cũng tương tự như quy trình đề cập trong phần Tải phông chữ xuống.

Để tải phông chữ xuống sử dụng thư viện hỗ trợ, hãy nhập các lớp FontsContractCompatFontRequest từ gói android.support.v4.provider. Tạo bản sao của các lớp này thay vì các lớp khung FontsContractandroid.graphics.fonts.FontRequest.

Lưu ý: Bạn phải cung cấp chứng chỉ khi yêu cầu phông chữ thông qua thư viện hỗ trợ. Điều này áp dụng ngay cả cho các trình cung cấp phông chữ đã cài đặt sẵn.

Thêm phần phụ thuộc vào thư viện hỗ trợ

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

Cách thêm thư viện hỗ trợ vào dự án ứng dụng:

  1. Mở tệp build.gradle của ứng dụng.
  2. Thêm thư viện hỗ trợ vào phần dependencies.

Groovy

dependencies {
    ...
    implementation "com.android.support:support-compat:28.0.0"
}

Kotlin

dependencies {
    ...
    implementation("com.android.support:support-compat:28.0.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à Thư viện hỗ trợ 26 giúp khai báo phông chữ tuỳ chỉnh dưới dạng một tài nguyên trong bố cục XML nhanh chóng và thuận tiện hơn. Điều này có nghĩa là bạn không cần phải gói phông chữ dưới dạng một tài sản. 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ư chế độ Đậm, Trung bình hoặc Sáng 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à đặt các thuộc tính liên quan đến phông chữ như hiển thị 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 khảo 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 phương thức getFont() để truy xuất tệp theo phương thức lập trình. Ví dụ: getFont(R.font.font_file_name).

Phông chữ khai báo trước 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 truy xuất phông chữ đầu tiên sẽ kích hoạt yêu cầu đến trình cung cấp phông chữ, sau đó tăng thời gian bố cục đầu tiên. Để tránh bị 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 lấy 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 quá trình truy xuất phông chữ mất nhiều thời gian hơn dự kiến, hệ thống sẽ huỷ quá trình tìm nạp và sử dụng phông chữ mặc định.

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

  1. Tạo một dải tài nguyên trong res/values/arrays.xml và khai báo Phông chữ có thể tải xuống 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. Dùng thẻ meta-data để khai báo dải tài nguyên trong tệp kê khai của bạn.
  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ữ không được cài đặt sẵn hoặc nếu bạn đang sử dụng thư viện hỗ trợ, bạn phải khai báo chứng chỉ mà trình cung cấp phông chữ đã được ký. Hệ thống sử dụng chứng chỉ để xác minh danh tính của trình cung cấp phông chữ.

Lưu ý: Android Studio có thể tự động điền các giá trị cho trình cung cấp dịch vụ Google Play nếu bạn sử dụng trình chọn phông chữ trong Android Studio. Để biết thêm thông tin về cách sử dụng Android Studio để tải phông chữ xuống, hãy truy cập phần Sử dụng phông chữ có thể tải xuống qua Android Studio và các dịch vụ của Google Play.

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ề chi tiết chứng chỉ, tham khảo tài liệu trong 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"
    

    Lưu ý: Nếu trình cung cấp có nhiều bộ chứng chỉ, bạn có thể xác định một dải các mảng chuỗi.

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

Kể từ phiên bản Compose 1.2-alpha07, bạn có thể sử dụng API phông chữ có thể tải xuống trong ứng dụng Compose để tải Google Fonts xuống một cách không đồng bộ và sử dụng chúng trong ứng dụng của bạn. Để biết thêm thông tin, hãy xem tài liệu phông chữ có thể tải xuống Compose của chúng tôi.