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 mới hơn có thể hiển thị dưới dạng một ô vuông nhỏ gọi là đậu phụ (tofu) (☐) hoặc các trình tự biểu tượng cảm xúc hiển thị không chính 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) |
BOM tháng 3 năm 2023 (Compose UI 1.4) hỗ trợ phiên bản biểu tượng cảm xúc mới nhất, bao gồm cả khả năng tương thích ngược với các phiên bản Android cũ xuống API 21.
Hoạt động hỗ trợ này không yêu cầu thay đổi nào đối với ứng dụng của bạn – nếu bạn sử dụng Text
và
TextField
(Material 2 hoặc Material 3) hoặc BasicText
và
BasicTextField
, bạn có thể sử dụng ngay tính năng hỗ trợ biểu tượng cảm xúc hiện đại.
Cách tốt nhất để kiểm thử các biểu tượng cảm xúc mới nhất trong ứng dụng là sử dụng một thiết bị thực chạy API 30 trở xuống.
Nếu bạn đang dùng giải pháp biểu tượng cảm xúc tuỳ chỉnh hoặc cần tắt biểu tượng cảm xúc mặc định
độ phân giải trong Compose vì bất kỳ lý do nào khác, bạn có thể sử dụng
PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Khả năng tương tác
Nếu ứng dụng của bạn dùng cả Thành phần hiển thị và Compose trong cùng một Activity
, hãy đảm bảo bạn
đang sử dụng các API thích hợp để định cấu hình biểu tượng cảm xúc một cách chính xác. Các phần sau đây mô tả thời điểm sử dụng từng API.
Mở rộng từ ComponentActivity
Nếu Activity
của bạn mở rộng từ Compose ComponentActivity
thay vì
AppCompatActivity
, làm theo Biểu tượng cảm xúc hỗ trợ không có AppCompat
hướng dẫn.
Vì bạn không mở rộng AppCompatActivity
, hãy thêm Emoji2
thư viện vào các phần phụ thuộc và sử dụng EmojiTextView
trong khung hiển thị
thay vì tiện ích TextView
, như trong đoạn mã sau:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: EmojiTextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
Sau đó, trong tệp XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Mở rộng từ AppCompatActivity
Nếu Activity
của bạn kéo dài từ AppCompatActivity
, bạn có thể sử dụng
ComposeView
để gọi các hàm có khả năng kết hợp. Biểu tượng cảm xúc hiển thị chính xác trên các phiên bản Android khi bạn sử dụng thành phần kết hợp Văn bản.
Nếu bạn đang mở rộng từ AppCompatActivity
, hãy tăng cường TextView
từ XML
để biểu tượng cảm xúc hiển thị chính xác.
Điều này áp dụng nếu bạn đang tăng cường XML:
- bên ngoài
ComposeView
, trongActivity
. Lưu ý việc sử dụngAppCompatActivity
vàTextView
trong đoạn mã sau:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: TextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
- bên trong
ComposeView
qua tính năng liên kết khung hiển thị bằng cách sử dụngAndroidViewBinding
, như trong đoạn mã sau:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidViewBinding(ExampleViewBinding::inflate) { emojiTextView.text = EMOJI_TEXT } } } } ) } }
Để tăng cường văn bản bằng AndroidView
bên trong ComposeView
, hãy sử dụng
AppCompatTextView
để hiển thị biểu tượng cảm xúc đúng cách:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidView( factory = { context -> AppCompatTextView(context) }, update = { it.text = EMOJI_TEXT } ) } } } ) } }
Xem tài liệu về Interoperability API (API Khả năng tương tác) để biết thông tin chi tiết.
Khắc phục sự cố
Nếu bạn nhìn thấy đậu phụ (☐) thay vì biểu tượng cảm xúc, trước tiên, hãy kiểm tra xem vấn đề có phải là thiết bị thử nghiệm cụ thể của bạn. Dưới đây là một số việc chính mà bạn có thể kiểm tra:
- Có thể bạn đang dùng một thiết bị được cài đặt ROM gần đây hoặc một trình mô phỏng mới. Nếu có thể, hãy thử một thiết bị thử nghiệm thực khác mà bạn thường sử dụng đã đăng nhập vào Tài khoản Google của bạn. Hãy nhớ rằng API phải từ 30 trở xuống để đảm bảo biểu tượng cảm xúc hoạt động ở đúng phiên bản.
- Điện thoại thử nghiệm không hỗ trợ phông chữ có thể tải xuống.
- Kiểm tra phiên bản chính xác của Dịch vụ Google Play.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Những điểm khác cần cân nhắc
- Văn bản trong Compose
- Cuộn