Bộ biểu tượng cảm xúc tiêu chuẩn được làm mới hằng năm bằng cách Unicode, vì mức độ sử dụng biểu tượng cảm xúc ngày càng tăng cho mọi loại ứng dụng.
Nếu ứng dụng của bạn hiển thị nội dung Internet hoặc cung cấp tính năng nhập văn bản, chúng tôi đặc biệt bạn nên hỗ trợ phông chữ biểu tượng cảm xúc mới nhất. Nếu không, biểu tượng cảm xúc sau này có thể sẽ là hiển thị dưới dạng một hộp hình vuông nhỏ có tên là đậu phụ (☐) hoặc loại hiển thị không chính xác khác trình tự biểu tượng cảm xúc.
Android phiên bản 11 (API cấp 30) trở xuống không thể cập nhật phông chữ biểu tượng cảm xúc, vì vậy bạn phải cập nhật các ứng dụng hiển thị chúng trên các phiên bản đó theo cách thủ công.
Sau đây là ví dụ về biểu tượng cảm xúc hiện đại.
Ví dụ | Phiên bản |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (Tháng 9 năm 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (Tháng 9 năm 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (Tháng 3 năm 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (Tháng 10 năm 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (Tháng 2 năm 2019) |
Thư viện androidx.emoji2:emoji2
cung cấp khả năng tương thích ngược đơn giản hơn với các phiên bản Android thấp hơn. Thư viện emoji2
là phần phụ thuộc của
AppCompat
và không yêu cầu
cấu hình bổ sung để hoạt động.
Hỗ trợ biểu tượng cảm xúc trong Compose
BOM tháng 3 năm 2023 (Giao diện người dùng Compose 1.4) hỗ trợ biểu tượng cảm xúc mới nhất của bạn, bao gồm khả năng tương thích ngược với các phiên bản Android cũ xuống API 21. Trang này trình bày cách định cấu hình biểu tượng cảm xúc hiện đại trong hệ thống Chế độ xem. Xem trang Biểu tượng cảm xúc trong Compose để tìm hiểu thêm.
Điều kiện tiên quyết
Để xác nhận rằng ứng dụng của bạn hiển thị đúng biểu tượng cảm xúc mới hơn, hãy chạy biểu tượng cảm xúc đó trên một thiết bị chạy Android 10 (API cấp 29) trở xuống. Trang này có biểu tượng cảm xúc hiện đại có thể hiển thị để thử nghiệm.
Sử dụng AppCompat để hỗ trợ biểu tượng cảm xúc mới nhất
AppCompat
1.4 có hỗ trợ biểu tượng cảm xúc.
Để hỗ trợ biểu tượng cảm xúc bằng AppCompat
, hãy làm như sau:
Kiểm tra để đảm bảo mô-đun của bạn chạy phiên bản thư viện
AppCompat
1.4.0-alpha01 trở lên.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Hãy đảm bảo rằng tất cả hoạt động hiển thị văn bản đều mở rộng lớp
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Kiểm thử quá trình tích hợp bằng cách phát hành ứng dụng trên một thiết bị chạy Android 10 hoặc thấp hơn và hiển thị chuỗi kiểm tra sau. Hãy đảm bảo tất cả các ký tự hiển thị chính xác.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Ứng dụng của bạn tự động hiển thị biểu tượng cảm xúc có khả năng tương thích ngược trên mọi thiết bị
cung cấp một trình cung cấp phông chữ có thể tải xuống tương thích với emoji2
, chẳng hạn như các thiết bị
được hỗ trợ bởi Dịch vụ Google Play.
Nếu ứng dụng của bạn đang sử dụng AppCompat nhưng hiển thị ký hiệu đậu phụ (☐)
Trong một số trường hợp, ứng dụng của bạn có thể cho thấy đậu hũ thay vì biểu tượng cảm xúc phù hợp, ngay cả khi
bạn thêm thư viện AppCompat
. Sau đây là những cách giải thích có thể có và
Cloud.
Bạn đang chạy ứng dụng này trên một thiết bị đã cài đặt ROM gần đây hoặc trên một trình mô phỏng mới
Xoá dữ liệu Dịch vụ Google Play của ứng dụng để xoá mọi hoạt động lưu phông chữ vào bộ nhớ đệm có thể xảy ra trong quá trình khởi động. Cách này thường giải quyết được vấn đề sau vài giờ.
Để xoá dữ liệu ứng dụng, hãy làm như sau:
Mở phần Cài đặt trên thiết bị chạy Android.
Nhấn vào mục Ứng dụng và thông báo.
Nhấn vào Xem tất cả ứng dụng hoặc Thông tin ứng dụng.
Di chuyển qua các ứng dụng rồi nhấn vào Dịch vụ Google Play.
Nhấn vào Bộ nhớ và bộ nhớ đệm.
Nhấn vào Xoá bộ nhớ đệm.
Ứng dụng của bạn hiện không sử dụng lớp AppCompat liên quan tới văn bản
Điều này có thể xảy ra nếu bạn không mở rộng AppCompatActivity
hoặc nếu bạn tạo thực thể cho một
chế độ xem trong mã, chẳng hạn như TextView
. Kiểm tra mục sau:
- Hoạt động mở rộng
AppCompatActivity
. - Nếu bạn tạo chế độ xem trong mã, hãy sử dụng đúng
AppCompat
lớp con.
AppCompatActivity
tự động tăng cường AppCompatTextView
thay cho TextView
khi tăng cường XML, vì vậy bạn không cần phải cập nhật XML.
Điện thoại thử nghiệm không hỗ trợ phông chữ có thể tải xuống
Xác minh rằng DefaultEmojiCompatConfig.create
trả về cấu hình có giá trị.
Một trình mô phỏng ở một cấp độ API cũ chưa nâng cấp Dịch vụ Google Play
Khi dùng trình mô phỏng ở một cấp độ API cũ hơn, có thể bạn cần cập nhật
Các dịch vụ Google Play đi kèm cho emoji2
để tìm nhà cung cấp phông chữ. Để thực hiện việc này,
đăng nhập vào Cửa hàng Google Play trên trình mô phỏng.
Để xác minh rằng phiên bản tương thích đã được cài đặt, hãy làm như sau:
Chạy lệnh sau:
adb shell dumpsys package com.google.android.gms | grep version
Kiểm tra để đảm bảo rằng
versionCode
cao hơn211200000
.
Hỗ trợ biểu tượng cảm xúc không có AppCompat
Nếu không thể chứa AppCompat
thì ứng dụng của bạn có thể trực tiếp sử dụng emoji2
. Chiến dịch này
đòi hỏi nhiều thao tác hơn, vì vậy, chỉ sử dụng phương thức này nếu ứng dụng của bạn không thể sử dụng AppCompat
.
Để hỗ trợ biểu tượng cảm xúc mà không cần thư viện AppCompat
, hãy làm như sau:
Trong tệp
build.gradle
của ứng dụng, hãy thêmemoji2
vàemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
Mô-đun
emoji2-views
cung cấp lớp con củaTextView
,Button
vàEditText
mà triển khaiEmojiCompat
. Không sử dụng trong một ứng dụng bao gồmAppCompat
vì ứng dụng này đã triển khaiEmojiCompat
Trong XML và mã, bất cứ khi nào bạn sử dụng
TextView
,EditText
hoặcButton
—sử dụngEmojiTextView
,EmojiEditText
hoặc Thay vào đó, hãyEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Bằng cách thêm mô-đun
emoji2
, hệ thống sẽ sử dụng tệp mặc định có thể tải xuống trình cung cấp phông chữ để tải phông chữ biểu tượng cảm xúc tự động ngay sau khi khởi động ứng dụng. Không cần thiết lập thêm.Để kiểm tra quá trình tích hợp, hãy phát hành ứng dụng trên một thiết bị chạy Android 11 hoặc hạ thấp và hiển thị các chuỗi kiểm tra sau. Hãy đảm bảo tất cả các ký tự hiển thị chính xác.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Sử dụng EmojiCompat mà không cần tiện ích
EmojiCompat
sử dụng EmojiSpan
để
hiển thị hình ảnh chính xác. Do đó, hàm này phải chuyển đổi mọi
đối tượng CharSequence
vào một
Đối tượng Spanned
có các đối tượng EmojiSpan
.
Lớp EmojiCompat cung cấp phương thức process()
để chuyển đổi CharSequences
thành các phiên bản Spanned
. Khi sử dụng phương thức này, bạn có thể gọi process()
trong phần tử
chạy trong nền và lưu kết quả vào bộ nhớ đệm, từ đó cải thiện hiệu suất của ứng dụng.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Sử dụng EmojiCompat để chỉnh sửa phương thức nhập
Lớp EmojiCompat
cho phép bàn phím kết xuất biểu tượng cảm xúc mà ứng dụng hỗ trợ
mà họ đang tương tác. Trình chỉnh sửa phương thức nhập
(IME) có thể sử dụng
getEmojiMatch()
để kiểm tra xem thực thể của EmojiCompat
có thể kết xuất
biểu tượng cảm xúc. Phương thức này sử dụng một CharSequence
của một biểu tượng cảm xúc và trả về true
nếu EmojiCompat
có thể phát hiện và hiển thị biểu tượng cảm xúc đó.
Bàn phím cũng có thể kiểm tra phiên bản EmojiCompat
mà ứng dụng hỗ trợ để xác định biểu tượng cảm xúc nào sẽ hiển thị trong bảng chế độ xem. Để kiểm tra phiên bản này, nếu có, bàn phím có thể tìm các mã khoá sau trong gói EditorInfo.extras
:
EDITOR_INFO_METAVERSION_KEY
: biểu thị phiên bản siêu dữ liệu biểu tượng cảm xúc mà ứng dụng sử dụng. Nếu mã khoá này không tồn tại thì ứng dụng không sử dụngEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: nếu khoá này tồn tại và được đặt thànhtrue
, thì ứng dụng sẽ định cấu hìnhEmojiCompat
để thay thế tất cả biểu tượng cảm xúc, ngay cả khi các biểu tượng đó đã có trong hệ thống.
Tìm hiểu thêm về cách định cấu hình một phiên bản của EmojiCompat.
Sử dụng biểu tượng cảm xúc trong thành phần hiển thị tuỳ chỉnh
Nếu ứng dụng của bạn có chế độ xem tùy chỉnh
các lớp con trực tiếp hoặc gián tiếp của TextView
– ví dụ: Button
,
Switch
hoặc EditText
—và các chế độ xem đó có thể hiển thị nội dung do người dùng tạo
mỗi nội dung phải triển khai
EmojiCompat
.
Quy trình này còn tuỳ thuộc vào việc ứng dụng của bạn có dùng thư viện AppCompat
hay không.
Thêm thành phần hiển thị tuỳ chỉnh cho các ứng dụng bằng AppCompat
Nếu ứng dụng của bạn sử dụng AppCompat
, hãy mở rộng phương thức triển khai AppCompat
thay vì
việc triển khai nền tảng. Hãy tham khảo bảng sau đây để biết cách
mở rộng lượt xem của bạn trong AppCompat
:
Thay vì mở rộng... | Mở rộng |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Thêm thành phần hiển thị tuỳ chỉnh cho các ứng dụng không có AppCompat
Nếu ứng dụng của bạn không sử dụng AppCompat
, hãy sử dụng trình trợ giúp tích hợp thành phần hiển thị trong mô-đun emoji2-views-helper
với thiết kế có thể sử dụng trong thành phần hiển thị tùy chỉnh. Đây là những trình trợ giúp mà thư viện AppCompat
sử dụng để triển khai việc hỗ trợ biểu tượng cảm xúc.
Hãy hoàn tất các bước sau để hỗ trợ thành phần hiển thị tuỳ chỉnh cho các ứng dụng không sử dụng AppCompat
.
Thêm thư viện
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Hãy làm theo hướng dẫn để đưa vào
EmojiTextViewHelper
hoặcEmojiEditTextHelper
trong khung hiển thị tuỳ chỉnh của ứng dụng.Kiểm thử quá trình tích hợp bằng cách phát hành ứng dụng trên một thiết bị chạy Android 10 hoặc thấp hơn và hiển thị chuỗi kiểm tra sau. Hãy đảm bảo tất cả các ký tự hiển thị chính xác.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Các tính năng không bắt buộc để xử lý emoji2
Sau khi đưa thư viện emoji2
vào ứng dụng, bạn có thể thêm thuộc tính tuỳ chọn
được mô tả trong phần này.
Định cấu hình emoji2 để sử dụng phông chữ hoặc trình cung cấp phông chữ có thể tải xuống khác
Để định cấu hình emoji2
cho phép sử dụng phông chữ hoặc trình cung cấp phông chữ có thể tải xuống khác, hãy làm như sau:
Tắt
EmojiCompatInitializer
bằng cách thêm đoạn mã sau vào tệp kê khai:<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" tools:node="remove" /> </provider>
Thực hiện một trong các thao tác sau:
Sử dụng cấu hình mặc định bằng cách gọi
DefaultEmojiCompatConfiguration.create(context)
.Tạo cấu hình của riêng bạn để tải phông chữ từ một nguồn khác bằng cách sử dụng
EmojiCompat.Config
. Lớp này cung cấp một số lựa chọn để sửa đổiEmojiCompat
của bạn như được mô tả trong phần sau.
Sửa đổi hành vi của EmojiCompat
Bạn có thể sử dụng bản sao của EmojiCompat.Config
để sửa đổi EmojiCompat
hành vi.
Tuỳ chọn cấu hình quan trọng nhất là setMetadataLoadStrategy()
. Tuỳ chọn này kiểm soát thời điểm EmojiCompat
tải phông chữ. Quá trình tải phông chữ sẽ bắt đầu ngay khi
EmojiCompat.load()
được gọi và thao tác này sẽ kích hoạt mọi lượt tải xuống cần thiết. Chiến lược phát hành đĩa đơn
hệ thống sẽ tạo một chuỗi để tải phông chữ xuống trừ phi ứng dụng của bạn cung cấp chuỗi đó.
LOAD_STRATEGY_MANUAL
cho phép bạn kiểm soát thời điểm EmojiCompat.load()
được gọi và
LOAD_STRATEGY_DEFAULT
giúp quá trình tải bắt đầu một cách đồng bộ trong lệnh gọi đến
EmojiCompat.init()
.
Hầu hết ứng dụng đều dùng LOAD_STRATEGY_MANUAL
để có thể kiểm soát luồng và thời gian
trong quá trình tải phông chữ. Ứng dụng phải trì hoãn cho đến khi màn hình đầu tiên hiển thị
tránh gây ra độ trễ khi khởi động. EmojiCompatInitializer
theo dõi nội dung này
và trì hoãn việc tải phông chữ biểu tượng cảm xúc cho đến khi màn hình đầu tiên tiếp tục.
Sử dụng các phương thức sau của lớp cơ sở để thiết lập các khía cạnh khác của cấu hình:
setReplaceAll()
: xác định liệuEmojiCompat
có thay thế tất cả biểu tượng cảm xúc được tìm thấy bằng các thực thể hay không trong tổng sốEmojiSpan
. Theo mặc định, khiEmojiCompat
suy luận rằng hệ thống có thể kết xuất biểu tượng cảm xúc thì sẽ không thay thế biểu tượng cảm xúc đó. Khi đặt thànhtrue
,EmojiCompat
thay thế tất cả biểu tượng cảm xúc bằng các đối tượngEmojiSpan
.setEmojiSpanIndicatorEnabled()
: cho biết liệuEmojiCompat
có thay thế biểu tượng cảm xúc bằngEmojiSpan
hay không . Khi bạn đặt thànhtrue
,EmojiCompat
sẽ vẽ một nền choEmojiSpan
. Phương thức này chủ yếu dùng để gỡ lỗi.setEmojiSpanIndicatorColor
: đặt màu để biểu thịEmojiSpan
. Giá trị mặc định làGREEN
.registerInitCallback()
: thông báo cho ứng dụng về trạng thái của quá trình khởi chạyEmojiCompat
.
Thêm trình nghe quá trình khởi động
Các lớp EmojiCompat
và EmojiCompat.Config
cung cấp
registerInitCallback()
và
unregisterInitCallback()
để đăng ký và huỷ đăng ký các lệnh gọi lại khởi tạo. Ứng dụng của bạn sử dụng
các lệnh gọi lại để đợi cho đến khi EmojiCompat
được khởi chạy rồi mới xử lý biểu tượng cảm xúc trên
luồng nền hoặc trong khung hiển thị tuỳ chỉnh.
Để sử dụng các phương thức này, hãy tạo một phiên bản của lớp EmojiCompat.InitCallback
. Hãy gọi các phương thức này và chuyển vào phiên bản của lớp EmojiCompat.InitCallback
. Khi quá trình khởi động thành công, lớp EmojiCompat
sẽ gọi phương thức onInitialized()
. Nếu thư viện không khởi chạy được, lớp EmojiCompat
sẽ gọi phương thức
onFailed()
.
Để kiểm tra trạng thái khởi chạy bất cứ lúc nào, hãy gọi phương thức
getLoadState()
. Phương thức này trả về một trong các giá trị sau:
LOAD_STATE_LOADING
!
LOAD_STATE_SUCCEEDED
,
hoặc
LOAD_STATE_FAILED
.
Hỗ trợ phông chữ đi kèm với emoji2
Bạn có thể sử dụng cấu phần phần mềm emoji2-bundled
để gộp một phông chữ biểu tượng cảm xúc vào ứng dụng.
Tuy nhiên, vì phông chữ NotoColorEmoji
lớn hơn 10 MB, nên chúng tôi
ứng dụng của bạn nên dùng phông chữ có thể tải xuống khi có thể. Chiến lược phát hành đĩa đơn
Cấu phần phần mềm emoji2-bundled
dành cho các ứng dụng trên những thiết bị không hỗ trợ
phông chữ có thể tải xuống.
Để sử dụng cấu phần mềm emoji2-bundled
, hãy làm như sau:
Bao gồm các cấu phần phần mềm
emoji2-bundled
vàemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Định cấu hình
emoji2
để sử dụng cấu hình đi kèm:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Kiểm tra quá trình tích hợp bằng cách làm theo các bước trước đó để thêm
emojicompat
có hoặc không cóAppCompat
. Đảm bảo chuỗi kiểm thử hiển thị chính xác.- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Tác động của cấu hình EmojiCompat tự động
Hệ thống áp dụng cấu hình mặc định bằng cách sử dụng thư viện khởi động,
EmojiCompatInitializer
và
DefaultEmojiCompatConfig
.
Sau khi hoạt động đầu tiên tiếp tục trong ứng dụng của bạn, trình khởi chạy sẽ lên lịch biểu tượng cảm xúc đang tải phông chữ. Độ trễ ngắn này cho phép ứng dụng của bạn hiển thị nội dung ban đầu mà không mọi độ trễ tiềm ẩn do việc tải phông chữ trong luồng ở chế độ nền.
DefaultEmojiCompatConfig
tìm phông chữ có thể tải xuống do hệ thống cài đặt
nhà cung cấp dịch vụ triển khai giao diện EmojiCompat
, chẳng hạn như Google Play
luôn miễn phí. Trên các thiết bị do dịch vụ Google Play cung cấp, tính năng này sẽ tải phông chữ thông qua việc sử dụng dịch vụ Google Play.
Trình khởi tạo tạo một chuỗi nền để tải phông chữ và phông chữ biểu tượng cảm xúc
có thể mất đến 10 giây trước khi hết thời gian chờ. Sau khi tải phông chữ xuống, bạn sẽ mất khoảng 150 mili giây để khởi động một chuỗi trong nền EmojiCompat
.
Hoãn việc khởi động EmojiCompat
, ngay cả khi bạn tắt EmojiCompatInitializer
. Nếu bạn định cấu hình theo cách thủ công
EmojiCompat
, hãy gọi EmojiCompat.load()
sau khi màn hình hiển thị
màn hình đầu tiên của ứng dụng để tránh tranh chấp trong nền với
tải màn hình.
Sau khi tải, EmojiCompat
dùng khoảng 300 KB RAM để lưu giữ biểu tượng cảm xúc
siêu dữ liệu.