Tính năng Phông chữ có thể tải xuống cho phép các API yêu cầu phông chữ từ ứng dụng của nhà cung cấp thay vì gộp các 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 các 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, do đó 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 trình cung cấp. Tính năng 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.
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.
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 Android Studio và Dịch vụ Google Play
- Theo phương thức lập trình
- Sử dụng thư viện AndroidX Core
Dùng phông chữ có thể tải xuống với Android Studio và Dịch vụ 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. Để 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ể sử dụng trình cung cấp phông chữ trên Dịch vụ Google Play.
- Trong Layout Editor, hãy chọn một
TextView
. Sau đó, trong phần Attributes (Thuộc tính), hãy chọn fontFamily > More Fonts (fontFamily > Phông chữ khác). Cửa sổ Resources (Tài nguyên) sẽ xuất hiện. - Trong trình đơn Source (Nguồn), hãy chọn Google Fonts (Phông chữ của Google).
- Trong hộp Fonts (Phông chữ), hãy chọn một phông chữ trong phần "Downloadable" (Có thể tải xuống).
- Chọn Create downloadable font (Tạo phông chữ có thể tải xuống) và nhấp vào OK.
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.
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 cung cấp khả năng hỗ trợ đầy đủ cho 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 AndroidX Core, hãy xem phần Thư viện phông chữ có thể tải xuống AndroidX Core 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 2 lớp chính:
android.graphics.fonts.FontRequest
: lớp này cho phép bạn tạo yêu cầu phông chữ.FontsContractCompat
: lớp này cho phép bạn tạo một đối tượngTypeface
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 nhà cung cấp có một bộ hạn chế riêng đối với các phiên bản Android và ngôn ngữ truy vấn mà nhà cung cấp đó 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 hoàn tất các bước sau:
- Tạo một thực thể 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:- Thẩm 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 của 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.
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);
- Tạo một thực thể của lớp
FontsContract.FontRequestCallback
. - 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ể 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ênTextView
. - 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 hằng số mã lỗi. - 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ẽ bắt đầu một quá trình 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ữ sẽ gọi 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 thông số sau:- Một thực thể của lớp
Context
- 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 luồng
- Một thực thể của lớp
Mã mẫu sau minh hoạ quy trình tổng thể 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ữ, hãy xem ứng dụng mẫu DownloadableFonts (Phông chữ có thể tải xuống).
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 API Android phiên bản 14 trở lên. Gói androidx.core.provider
chứa các lớp FontsContractCompat
và FontRequest
để triển khai dịch vụ 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. Các lớp AndroidX chứa các phương thức tương tự như phương thức khung và quy trình tải phông chữ xuống cũng tương tự như quy trình được mô tả trong phần trên trang này về cách sử dụ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 các lớp FontsContractCompat
và FontRequest
từ gói androidx.core.provider
. Tạo thực thể của các lớp này thay vì các lớp khung FontsContract
và android.graphics.fonts.FontRequest
.
Thêm phần phụ thuộc AndroidX Core
Để sử dụng các lớp FontsContractCompat
và FontRequest
, 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, hãy thêm phần phụ thuộc sau vào tệp build.gradle
của ứng dụng:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
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 giúp khai báo phông chữ tuỳ chỉnh dưới dạng tài nguyên trong bố cục XML nhanh hơn 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 thành phần. Bạn có thể xác định phông chữ tuỳ chỉnh cho toàn bộ giao diện, giúp tăng khả năng hữu dụng cho nhiều kiểu và trọng số (chẳng hạn như đậm, trung bình hoặc sáng) khi được cung cấp.
- Tạo tệp XML mới trong thư mục
res/font
. - Thêm một thành phần gốc
<font-family>
và đặt các thuộc tính liên quan đến phông chữ, như minh hoạ trong tệp XML mẫu sau đây: - 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ể dùng phương thứcgetFont()
để 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)
.
<?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>
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 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ữ, từ đó làm tăng thời gian bố cục đầu tiên. Để 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, phông chữ đó sẽ có sẵn ngay lập tức. Nếu việc 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 hoàn tất các bước sau:
- 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. - Dùng thẻ
meta-data
để khai báo mảng tài nguyên trong tệp kê khai.
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>
<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 trước hoặc nếu bạn đang sử dụng thư viện AndroidX Core, hãy khai báo chứng chỉ mà trình cung cấp phông chữ đã 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ữ.
Thực hiện các bước sau để thêm chứng chỉ:
- 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 chi tiết về chứng chỉ, hãy tham khảo tài liệu của trình cung cấp phông chữ.
- Đặt thuộc tính
fontProviderCerts
cho dãi.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"
Phông chữ có thể tải xuống trong Compose
Kể từ 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 Google Fonts xuống không đồng bộ và sử dụng trong ứng dụng. Để biết thêm thông tin, hãy xem tài liệu Phông chữ có thể tải xuống trong Compose.