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) |
Library androidx.emoji2:emoji2
memberikan kompatibilitas mundur yang lebih sederhana
dengan versi Android yang lebih rendah. Library emoji2
merupakan dependensi dari
library AppCompat
dan tidak memerlukan
konfigurasi lebih lanjut agar berfungsi.
Dukungan emoji di Compose
BOM Maret 2023 (Compose UI 1.4) menghadirkan dukungan untuk emoji terbaru termasuk kompatibilitas mundur dengan versi Android lama hingga API 21. Halaman ini membahas cara mengonfigurasi emoji modern dalam sistem View. Lihat halaman Emoji di Compose untuk melihat lainnya.
Prasyarat
Untuk mengonfirmasi bahwa aplikasi Anda menampilkan emoji yang lebih baru dengan benar, luncurkan emoji di perangkat menjalankan Android 10 (level API 29) atau yang lebih rendah. Halaman ini menyertakan emoji modern yang Anda yang dapat ditampilkan untuk pengujian.
Menggunakan AppCompat untuk mendukung emoji terbaru
AppCompat
1.4 menyertakan dukungan untuk emoji.
Untuk menggunakan AppCompat
guna mendukung emoji, lakukan hal berikut:
Pastikan modul Anda bergantung pada library
AppCompat
versi 1.4.0-alpha01 atau yang lebih tinggi.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Pastikan semua aktivitas yang menampilkan teks memperluas class
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Uji integrasi Anda dengan meluncurkan aplikasi di perangkat yang menjalankan Android 10 atau lebih rendah dan menampilkan string pengujian berikut. Pastikan semua karakter dirender dengan benar.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Aplikasi Anda secara otomatis menampilkan emoji yang kompatibel dengan versi lama di semua perangkat yang
menyediakan penyedia font yang dapat didownload dan kompatibel dengan emoji2
, misalnya perangkat
didukung oleh layanan Google Play.
Jika aplikasi Anda menggunakan AppCompat, tetapi menampilkan tofu (☐)
Dalam beberapa kasus, aplikasi Anda mungkin menampilkan tahu, bukan emoji yang tepat, meskipun
Anda akan menambahkan library AppCompat
. Berikut adalah kemungkinan penjelasan dan
terkemuka.
Anda menjalankan aplikasi di perangkat yang baru saja di-flash atau emulator baru
Hapus data layanan Google Play aplikasi untuk menghapus penyimpanan font yang mungkin terjadi selama startup. Tindakan ini biasanya menyelesaikan masalah setelah beberapa jam.
Untuk menghapus data aplikasi, lakukan hal berikut:
Buka Setelan di perangkat yang didukung Android Anda.
Ketuk Aplikasi & notifikasi.
Ketuk Lihat semua aplikasi atau Info aplikasi.
Scroll aplikasi, lalu ketuk Layanan Google Play.
Ketuk Penyimpanan & cache.
Ketuk Hapus cache.
Aplikasi Anda tidak menggunakan class terkait teks AppCompat
Hal ini dapat terjadi jika Anda tidak memperluas AppCompatActivity
atau jika Anda membuat instance
lihat dalam kode, seperti TextView
. Periksa hal-hal berikut ini:
- Aktivitas akan memperluas
AppCompatActivity
. - Jika membuat tampilan dalam kode, gunakan
AppCompat
yang benar subclass.
AppCompatActivity
akan otomatis meng-inflate AppCompatTextView
sebagai pengganti
TextView
saat meng-inflate XML, sehingga Anda tidak perlu mengupdate XML.
Ponsel uji coba tidak mendukung font yang dapat didownload
Pastikan DefaultEmojiCompatConfig.create
menampilkan konfigurasi non-null.
Emulator pada level API sebelumnya belum mengupgrade layanan Google Play
Saat menggunakan emulator pada API level sebelumnya, Anda mungkin perlu mengupdate
memaketkan layanan Google Play untuk emoji2
guna menemukan penyedia font. Untuk melakukannya:
login ke Google Play Store di emulator.
Untuk memastikan versi yang kompatibel telah diinstal, lakukan hal berikut:
Jalankan perintah berikut:
adb shell dumpsys package com.google.android.gms | grep version
Pastikan
versionCode
lebih tinggi dari211200000
.
Mendukung emoji tanpa AppCompat
Jika aplikasi Anda tidak dapat menyertakan AppCompat
, emoji2
dapat digunakan secara langsung. Ini
memerlukan lebih banyak pekerjaan, jadi hanya gunakan metode ini jika aplikasi Anda tidak dapat menggunakan AppCompat
.
Untuk mendukung emoji tanpa library AppCompat
, lakukan hal berikut:
Di file
build.gradle
aplikasi Anda, sertakanemoji2
danemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
Modul
emoji2-views
menyediakan subclass dariTextView
,Button
, danEditText
yang mengimplementasikanEmojiCompat
. Jangan gunakan di aplikasi yang menyertakanAppCompat
, karena sudah mengimplementasikanEmojiCompat
.Dalam XML dan kode—di mana pun Anda menggunakan
TextView
,EditText
, atauButton
—gunakanEmojiTextView
,EmojiEditText
, atauEmojiButton
sebagai gantinya.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Dengan menyertakan modul
emoji2
, sistem menggunakan default yang dapat didownload penyedia font untuk memuat font emoji secara otomatis segera setelah aplikasi dimulai. Lain kali diperlukan konfigurasi lebih lanjut.Untuk menguji integrasi Anda, luncurkan aplikasi di perangkat yang menjalankan Android 11 atau lebih rendah dan menampilkan string pengujian berikut. Pastikan semua karakter dirender dengan benar.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Menggunakan EmojiCompat tanpa widget
EmojiCompat
menggunakan EmojiSpan
untuk
merender gambar yang benar. Oleh karena itu, metode tersebut harus mengonversi
CharSequence
ke dalam objek
Objek Spanned
dengan objek EmojiSpan
.
Class EmojiCompat menyediakan metode process()
untuk mengubah CharSequences
menjadi instance Spanned
. Dengan metode ini, Anda dapat memanggil process()
di
latar belakang dan meng-cache hasilnya, yang meningkatkan performa aplikasi Anda.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Menggunakan EmojiCompat untuk editor metode input
Class EmojiCompat
memungkinkan keyboard merender emoji yang didukung aplikasi
mereka berinteraksi. Editor metode input
(IME) dapat menggunakan
getEmojiMatch()
untuk memeriksa apakah instance EmojiCompat
mampu merender
emoji. Metode ini memerlukan CharSequence
emoji dan menampilkan true
jika EmojiCompat
dapat mendeteksi dan merender emoji.
Keyboard juga dapat memeriksa versi EmojiCompat
yang didukung
aplikasi untuk menentukan emoji yang akan dirender dalam palet. Untuk memeriksa versinya, jika
tersedia, keyboard dapat mencari kunci berikut di
paket
EditorInfo.extras
:
EDITOR_INFO_METAVERSION_KEY
: merepresentasikan versi metadata emoji yang digunakan aplikasi. Jika kunci ini tidak ada, berarti aplikasi tidak menggunakanEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: jika kuncinya ada dan disetel ketrue
, aplikasi akan mengonfigurasiEmojiCompat
untuk mengganti semua emoji, meskipun emoji tersebut ada dalam sistem.
Pelajari lebih lanjut cara mengonfigurasi instance EmojiCompat.
Menggunakan emoji dalam tampilan kustom
Jika aplikasi Anda memiliki tampilan kustom yang
subclass langsung atau tidak langsung dari TextView
—misalnya, Button
,
Switch
, atau EditText
—dan tampilan tersebut dapat menampilkan tampilan
mereka masing-masing harus menerapkan
EmojiCompat
.
Prosesnya bervariasi, bergantung pada apakah aplikasi Anda menggunakan library AppCompat
atau tidak.
Menambahkan tampilan kustom untuk aplikasi dengan AppCompat
Jika aplikasi Anda menggunakan AppCompat
, perluas implementasi AppCompat
, bukan
dalam implementasi platform. Gunakan tabel berikut sebagai panduan
memperluas tampilan Anda di AppCompat
:
Sebagai ganti memperluas ... | Perluas |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Menambahkan tampilan kustom untuk aplikasi tanpa AppCompat
Jika aplikasi Anda tidak menggunakan AppCompat
, gunakan helper integrasi tampilan di
modul emoji2-views-helper
yang dirancang untuk digunakan dalam tampilan kustom. Helper ini
merupakan helper yang digunakan library AppCompat
untuk mengimplementasikan dukungan emoji.
Selesaikan langkah-langkah berikut untuk mendukung tampilan kustom bagi aplikasi yang tidak menggunakan
AppCompat
.
Tambahkan library
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Ikuti petunjuk untuk menyertakan
EmojiTextViewHelper
atauEmojiEditTextHelper
dalam tampilan kustom aplikasi Anda.Uji integrasi Anda dengan meluncurkan aplikasi di perangkat yang menjalankan Android 10 atau lebih rendah dan menampilkan string pengujian berikut. Pastikan semua karakter dirender dengan benar.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Fitur opsional untuk menangani emoji2
Setelah menyertakan library emoji2
di aplikasi, Anda dapat menambahkan library
fitur baru yang dijelaskan dalam bagian ini.
Mengonfigurasi emoji2 untuk menggunakan font lain atau penyedia font yang dapat didownload
Untuk mengonfigurasi emoji2
agar menggunakan font atau penyedia font yang dapat didownload, lakukan
hal berikut:
Nonaktifkan
EmojiCompatInitializer
dengan menambahkan kode berikut ke manifes:<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>
Lakukan salah satu hal berikut:
Gunakan konfigurasi default dengan memanggil
DefaultEmojiCompatConfiguration.create(context)
Buat konfigurasi Anda sendiri untuk memuat font dari sumber lain menggunakan
EmojiCompat.Config
. Class ini menyediakan beberapa opsi untuk mengubahEmojiCompat
Anda perilaku model, seperti dijelaskan dalam bagian berikut.
Mengubah perilaku EmojiCompat
Anda dapat menggunakan instance EmojiCompat.Config
untuk mengubah EmojiCompat
perilaku model.
Opsi konfigurasi yang paling penting adalah
setMetadataLoadStrategy()
,
yang akan mengontrol kapan EmojiCompat
memuat font. Pemuatan font dimulai segera setelah
EmojiCompat.load()
dipanggil, dan tindakan ini memicu download yang diperlukan. Tujuan
sistem akan membuat thread untuk mendownload font kecuali aplikasi Anda menyediakannya.
LOAD_STRATEGY_MANUAL
memungkinkan Anda mengontrol kapan EmojiCompat.load()
dipanggil, dan
LOAD_STRATEGY_DEFAULT
membuat pemuatan dimulai secara sinkron dalam panggilan ke
EmojiCompat.init()
Sebagian besar aplikasi menggunakan LOAD_STRATEGY_MANUAL
sehingga dapat mengontrol thread dan pengaturan waktu
pemuatan font. Aplikasi Anda harus menunda hingga setelah layar pertama ditampilkan untuk
menghindari timbulnya latensi pengaktifan. EmojiCompatInitializer
mengikuti ini
dan menunda pemuatan font emoji hingga layar pertama dilanjutkan.
Gunakan metode berikut dari class dasar untuk mengatur aspek lain dari konfigurasi:
setReplaceAll()
: menentukan apakahEmojiCompat
mengganti semua emoji yang ditemukannya dengan instance dariEmojiSpan
. Secara default, saatEmojiCompat
menyimpulkan bahwa sistem dapat merender emoji, tindakan tersebut tidak menggantikan emoji tersebut. Jika ditetapkan ketrue
,EmojiCompat
mengganti semua emoji dengan objekEmojiSpan
.setEmojiSpanIndicatorEnabled()
: menunjukkan apakahEmojiCompat
mengganti emoji denganEmojiSpan
. Jika disetel ketrue
,EmojiCompat
akan menggambar latar belakang untukEmojiSpan
. Metode ini hanya digunakan untuk tujuan proses debug.setEmojiSpanIndicatorColor
: menetapkan warna untuk menunjukkanEmojiSpan
. Nilai defaultnya adalahGREEN
registerInitCallback()
: memberi tahu aplikasi tentang status inisialisasiEmojiCompat
.
Menambahkan pemroses inisialisasi
Class EmojiCompat
dan EmojiCompat.Config
menyediakan
registerInitCallback()
dan
unregisterInitCallback()
untuk mendaftarkan dan membatalkan pendaftaran callback inisialisasi. Aplikasi Anda menggunakan fitur ini
callback untuk menunggu hingga EmojiCompat
diinisialisasi sebelum Anda memproses emoji
di thread latar belakang,
atau dalam tampilan kustom.
Untuk menggunakan metode ini, buat instance dari class
EmojiCompat.InitCallback
. Panggil metode ini dan teruskan instance class
EmojiCompat.InitCallback
. Setelah inisialisasi berhasil, class
EmojiCompat
akan memanggil metode
onInitialized()
.
Jika library gagal diinisialisasi, class EmojiCompat
akan memanggil
onFailed()
.
Untuk memeriksa status inisialisasi kapan saja, panggil metode
getLoadState()
. Metode ini akan menampilkan salah satu nilai berikut:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
atau
LOAD_STATE_FAILED
.
Mendukung font yang dipaketkan dengan emoji2
Anda dapat menggunakan artefak emoji2-bundled
untuk memaketkan font emoji ke dalam aplikasi.
Namun, karena font NotoColorEmoji
lebih dari 10 MB, kami sangat
sebaiknya aplikasi Anda menggunakan font yang dapat didownload jika memungkinkan. Tujuan
Artefak emoji2-bundled
ditujukan untuk aplikasi di perangkat yang tidak mendukung
font yang dapat didownload.
Untuk menggunakan artefak emoji2-bundled
, lakukan langkah berikut:
Sertakan artefak
emoji2-bundled
danemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Konfigurasikan
emoji2
untuk menggunakan konfigurasi yang dipaketkan:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Uji integrasi dengan mengikuti langkah-langkah sebelumnya untuk menyertakan
emojicompat
dengan atau tanpaAppCompat
. Memastikan string pengujian ditampilkan dengan benar.- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Dampak konfigurasi EmojiCompat otomatis
Sistem menerapkan konfigurasi {i>default<i}
menggunakan library {i>startup<i},
EmojiCompatInitializer
, dan
DefaultEmojiCompatConfig
.
Setelah aktivitas pertama dilanjutkan di aplikasi Anda, penginisialisasi menjadwalkan emoji font sedang dimuat. Keterlambatan singkat ini memungkinkan aplikasi Anda menampilkan konten awal tanpa potensi latensi karena pemuatan font di thread latar belakang.
DefaultEmojiCompatConfig
mencari font yang dapat didownload dan diinstal sistem
penyedia yang mengimplementasikan antarmuka EmojiCompat
, seperti Google Play
layanan IT perusahaan mereka. Pada perangkat yang didukung oleh layanan Google Play, tindakan ini akan memuat font menggunakan layanan Google Play.
Penginisialisasi membuat thread latar belakang untuk memuat font emoji dan font
download dapat memerlukan waktu hingga 10 detik sebelum waktu habis. Setelah font
didownload, diperlukan waktu sekitar 150 milidetik pada thread latar belakang untuk
melakukan inisialisasi EmojiCompat
.
Tunda inisialisasi EmojiCompat
, meskipun Anda menonaktifkan
EmojiCompatInitializer
. Jika Anda secara manual mengonfigurasi
EmojiCompat
, panggil EmojiCompat.load()
setelah ditampilkan
layar pertama aplikasi untuk menghindari
pertentangan latar belakang dengan
pemuatan layar berikutnya.
Setelah dimuat, EmojiCompat
menggunakan RAM sekitar 300 KB untuk menyimpan emoji
{i>metadata<i}.