Kumpulan emoji standar diperbarui setiap tahun oleh Unicode, seiring dengan meningkatnya penggunaan emoji dengan cepat untuk semua jenis aplikasi.
Jika aplikasi Anda menampilkan konten internet atau memberikan input teks, kami sangat sebaiknya dukung font emoji terbaru. Jika tidak, emoji berikutnya mungkin ditampilkan sebagai kotak persegi kecil yang disebut tofu (☐) atau kotak lainnya yang ditampilkan dengan salah rangkaian emoji.
Android versi 11 (API level 30) dan yang lebih lama tidak dapat mengupdate font emoji. aplikasi yang menampilkannya pada versi tersebut harus diupdate secara manual.
Berikut adalah contoh emoji modern.
Contoh | Versi |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (September 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (September 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (Maret 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (Oktober 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (Februari 2019) |
BOM Maret 2023 (Compose UI 1.4) menghadirkan dukungan untuk emoji terbaru , termasuk kompatibilitas mundur dengan versi Android lama ke bawah ke API 21.
Dukungan ini tidak memerlukan perubahan pada aplikasi Anda— jika Anda menggunakan Text
dan
TextField
(Material 2 atau Material 3) atau BasicText
dan
BasicTextField
, Anda akan mendapatkan dukungan emoji modern yang siap pakai.
Cara terbaik untuk menguji emoji terbaru di aplikasi Anda adalah dengan menggunakan perangkat sungguhan pada API 30 atau yang lebih rendah.
Jika Anda menggunakan solusi emoji kustom atau perlu menonaktifkan emoji default
resolusi di Compose karena alasan lain, Anda dapat menggunakan
PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperabilitas
Jika aplikasi Anda menggunakan View dan Compose di Activity
yang sama, pastikan Anda
menggunakan API yang sesuai untuk mengonfigurasi emoji dengan benar. Hal berikut
menjelaskan kapan harus menggunakan setiap API.
Diperpanjang dari ComponentActivity
Jika Activity
diperluas dari Compose ComponentActivity
, bukan
AppCompatActivity
, ikuti Emoji dukungan tanpa AppCompat
petunjuk.
Karena Anda tidak memperluas AppCompatActivity
, tambahkan Emoji2
library ke dependensi Anda dan menggunakan EmojiTextView
dalam tampilan Anda
bukan widget TextView
, seperti yang ditampilkan dalam cuplikan berikut:
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 } } } }
Kemudian, di file XML Anda:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Diperpanjang dari AppCompatActivity
Jika Activity
diperluas dari AppCompatActivity
, Anda dapat menggunakan
ComposeView
untuk memanggil fungsi composable. Emoji dirender dengan benar di
Versi Android saat Anda menggunakan composable Text.
Jika Anda memperluas dari AppCompatActivity
, inflate TextView
dari XML
agar emoji dirender dengan benar.
Hal ini berlaku jika Anda meng-inflate XML:
- di luar
ComposeView
, diActivity
. Perhatikan penggunaanAppCompatActivity
danTextView
dalam cuplikan berikut:
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 } } } }
- di dalam
ComposeView
, melalui view binding menggunakanAndroidViewBinding
, seperti dalam cuplikan berikut:
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 } } } } ) } }
Untuk meng-inflate teks dengan AndroidView
di dalam ComposeView
, gunakan
AppCompatTextView
untuk merender emoji dengan benar:
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 } ) } } } ) } }
Lihat dokumentasi Interoperabilitas API untuk mengetahui detailnya.
Pemecahan masalah
Jika Anda melihat tofu (☐) dan bukan emoji, periksa terlebih dahulu apakah masalahnya perangkat pengujian spesifik Anda. Ada beberapa hal utama yang dapat Anda periksa:
- Anda mungkin menggunakan perangkat yang baru di-flash atau emulator baru. Jika mungkin, coba perangkat pengujian lain yang sering Anda gunakan yang masuk ke ke akun Google Anda. Perlu diingat bahwa API harus berukuran 30 atau lebih rendah untuk memastikan emoji bekerja dalam versi yang benar.
- Ponsel uji coba tidak mendukung font yang dapat didownload.
- Periksa versi layanan Google Play yang benar.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Pertimbangan lainnya
- Teks dalam Compose
- Scroll