Support library EmojiCompat bertujuan untuk
    menjaga perangkat Android tetap terupdate dengan emoji terbaru. Library tersebut mencegah aplikasi
    Anda menampilkan karakter emoji yang hilang dalam bentuk ☐, yang
    menunjukkan bahwa perangkat Anda tidak memiliki font untuk menampilkan teks tersebut. Dengan
    menggunakan support library EmojiCompat,
    pengguna aplikasi Anda tidak perlu menunggu update Android OS untuk mendapatkan emoji
    terbaru.
  
 
    Lihat referensi terkait berikut ini:
Bagaimana cara kerja EmojiCompat?
    Support library EmojiCompat menyediakan
    class untuk mengimplementasikan dukungan emoji kompatibilitas mundur di perangkat yang menjalankan
    Android 4.4 (API level 19) dan yang lebih baru. Anda dapat mengonfigurasi
    EmojiCompat dengan font bawaan atau
    yang dapat didownload. Untuk informasi selengkapnya tentang konfigurasi, lihat
    bagian berikut:
  
    EmojiCompat mengidentifikasi emoji untuk CharSequence tertentu,
    menggantinya dengan
    EmojiSpans, jika diperlukan, dan
    merender glyph emoji. Gambar 2 menunjukkan prosesnya.
  
 
    Konfigurasi font yang dapat didownload
Konfigurasi font yang dapat didownload menggunakan fitur support library
    Downloadable Fonts untuk mendownload font emoji. Fitur tersebut juga mengupdate metadata emoji
    yang harus terus dijaga oleh support library
    EmojiCompat agar sesuai dengan versi terbaru spesifikasi
    Unicode-nya.
  
Menambahkan dependensi support library
    Untuk menggunakan support library EmojiCompat,
    Anda perlu mengubah dependensi classpath project aplikasi dalam
    lingkungan pengembangan Anda.
  
Untuk menambahkan support library ke project aplikasi Anda:
- Buka file build.gradleaplikasi Anda.
- Tambahkan support library ke bagian dependencies.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Melakukan inisialisasi konfigurasi font yang dapat didownload
    Anda perlu menginisialisasi EmojiCompat untuk
    memuat metadata dan typeface. Karena proses inisialisasi memerlukan waktu,
    proses ini berjalan pada thread latar belakang.
  
    Untuk menginisialisasi EmojiCompat dengan
    konfigurasi font yang dapat didownload, lakukan langkah-langkah berikut:
  
- Buat instance class FontRequestdan sediakan otoritas penyedia font, paket penyedia font, kueri font, dan daftar kumpulan hash untuk sertifikat. Untuk informasi selengkapnya tentangFontRequest, lihat bagian Menggunakan Downloadable Fonts secara terprogram di dokumentasi Downloadable Fonts.
- Buat instance
      FontRequestEmojiCompatConfigdan berikan instanceContextdanFontRequest.
- Inisialisasi EmojiCompatdengan memanggil metodeinit()dan teruskan instanceFontRequestEmojiCompatConfig.
- Gunakan widget EmojiCompatdalam XML tata letak. Jika Anda menggunakanAppCompat, lihat bagian Menggunakan widget EmojiCompat dengan AppCompat.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    Untuk informasi selengkapnya tentang cara mengonfigurasi
    EmojiCompat dengan konfigurasi font yang dapat didownload,
    buka aplikasi contoh Kompatibilitas Emoji
    Java
       | Kotlin.
  
Komponen library
 
    - Widget: EmojiEditText,EmojiTextView,EmojiButton
- Implementasi widget default untuk menggunakan
      EmojiCompatdenganTextView,EditText, danButton.
- EmojiCompat
- Platform publik utama untuk support library. Melakukan semua panggilan eksternal dan berkoordinasi dengan bagian sistem lain.
- EmojiCompat.Config
- Mengonfigurasi instance singleton agar dibuat.
- EmojiSpan
-  Subclass ReplacementSpanyang menggantikan karakter (urutan) dan merender glyph.
- Font EmojiCompat
- EmojiCompatmenggunakan font untuk menampilkan emoji. Font ini adalah versi modifikasi dari font Android Emoji. Font diubah seperti berikut:- Untuk memberikan kompatibilitas mundur guna merender emoji, semua karakter emoji diwakili dengan satu poin kode Unicode dalam Supplemental Private Use Area-A Unicode yang dimulai dari U+F0001.
- 
          Metadata emoji tambahan dimasukkan dalam format biner ke dalam font dan
         diuraikan pada saat runtime oleh
         EmojiCompat. Data tersebut disematkan dalam tabelmetafont, dengan tag pribadi Emji.
 
Opsi konfigurasi
    Anda dapat menggunakan instance EmojiCompat untuk
    mengubah perilaku EmojiCompat. Anda dapat menggunakan
    metode berikut dari class dasar untuk menetapkan konfigurasi:
  
- setReplaceAll(): Menentukan apakah- EmojiCompatharus mengganti semua emoji yang ditemukannya dengan- EmojiSpans. Secara default,- EmojiCompatmelakukan yang terbaik untuk memahami apakah sistem dapat merender emoji dan tidak menggantikan emoji tersebut. Jika ditetapkan ke- true,- EmojiCompatakan menggantikan semua emoji yang ditemukannya dengan- EmojiSpans.
- setEmojiSpanIndicatorEnabled(): Menunjukkan apakah- EmojiCompattelah mengganti emoji dengan- EmojiSpan. Jika ditetapkan ke- true,- EmojiCompatakan menggambar latar belakang untuk- EmojiSpan. Metode ini hanya digunakan untuk tujuan proses debug.
- setEmojiSpanIndicatorColor(): Menetapkan warna untuk menunjukkan- EmojiSpan. Nilai defaultnya adalah- GREEN.
- registerInitCallback: Memberi tahu aplikasi tentang status inisialisasi- EmojiCompat.
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Menambahkan pemroses inisialisasi
    Class EmojiCompat dan
    EmojiCompat
    menyediakan
    metode registerInitCallback()
    dan
    unregisterInitCallback()
    untuk mendaftarkan callback inisialisasi. Untuk menggunakan metode ini, buat
    instance dari class
    EmojiCompat.InitCallback. Panggil
    metode ini dan teruskan instance class
    EmojiCompat.InitCallback. Jika
    inisialisasi support library EmojiCompat
    berhasil, class EmojiCompat
    akan memanggil
    metode
    onInitialized(). Jika library gagal
    menginisialisasi, class EmojiCompat
    akan memanggil
    metode
    onFailed().
  
    Untuk memeriksa status inisialisasi pada semua titik, panggil
    metode
    getLoadState(). Metode akan menampilkan salah satu nilai berikut:
    LOAD_STATE_LOADING,
    LOAD_STATE_SUCCEEDED,
    atau LOAD_STATE_FAILED.
  
Menggunakan EmojiCompat dengan widget AppCompat
    Jika Anda menggunakan AppCompat widgets, Anda
    dapat menggunakan widget EmojiCompat yang diperluas
    dari AppCompat widgets.
  
- Tambahkan support library ke bagian dependensi.
      Groovydependencies { ... implementation "androidx.emoji:emoji-bundled:$version" } Kotlindependencies { implementation("androidx.emoji:emoji-appcompat:$version") } Groovydependencies { implementation "androidx.emoji:emoji-appcompat:$version" } 
- Gunakan widget EmojiCompatAppCompat Widgetdalam XML tata letak.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Konfigurasi font bawaan
    Support library EmojiCompat juga
    tersedia dalam versi font bawaan. Paket ini menyertakan font dengan
    metadata yang telah disematkan. Paket ini juga menyertakan
    BundledEmojiCompatConfig
    yang menggunakan AssetManager untuk memuat metadata
    dan font.
  
Catatan: Font berukuran beberapa megabyte.
Menambahkan dependensi support library
    Untuk menggunakan support library EmojiCompat
    dengan konfigurasi font bawaan, Anda harus mengubah dependensi classpath project aplikasi
    dalam lingkungan pengembangan Anda.
  
Untuk menambahkan support library ke project aplikasi Anda:
- Buka file build.gradleaplikasi Anda.
- Tambahkan support library ke bagian dependencies.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Menggunakan font bawaan untuk mengonfigurasi EmojiCompat
    Untuk menggunakan font bawaan guna mengonfigurasi
    EmojiCompat, lakukan langkah-langkah berikut:
  
- Gunakan BundledEmojiCompatConfiguntuk membuat instance dariEmojiCompatdan memberikan instanceContext.
- Panggil metode
     init()untuk menginisialisasiEmojiCompatdan meneruskan instanceBundledEmojiCompatConfig.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
Menggunakan EmojiCompat tanpa widget
    EmojiCompat menggunakan
    EmojiSpan untuk merender gambar yang benar.
    Oleh karena itu, metode tersebut harus mengubah CharSequence apa pun menjadi
    instance Spanned dengan
    EmojiSpans. Class
    EmojiCompat menyediakan metode untuk
    mengubah CharSequences menjadi
    instance Spanned dengan
    EmojiSpans. Dengan menggunakan metode ini,
    Anda dapat memproses dan meng-cache instance yang diproses, bukan string mentahnya,
    sehingga dapat 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 IME
    Dengan menggunakan support library EmojiCompat,
    keyboard dapat merender emoji yang didukung oleh aplikasi yang
    berinteraksi dengannya. IME dapat menggunakan metode
    hasEmojiGlyph()
    untuk memeriksa apakah EmojiCompat dapat
    merender emoji. Metode ini membutuhkan CharSequence dari
    emoji dan menampilkan true jika
    EmojiCompat dapat mendeteksi dan merender
    emoji.
  
    Keyboard juga dapat memeriksa versi support library
    EmojiCompat yang didukung aplikasi
    untuk menentukan emoji yang akan dirender pada palet. Untuk memeriksa
    versi, jika tersedia, keyboard harus memeriksa apakah kunci berikut
    ada di
    paket
    EditorInfo.extras:
  
- EDITOR_INFO_METAVERSION_KEY
- EDITOR_INFO_REPLACE_ALL_KEY
Jika kunci ada dalam paket, nilai tersebut mewakili versi
     metadata emoji yang digunakan aplikasi. Jika kunci ini tidak ada,
     aplikasi tidak menggunakan EmojiCompat.
    
Jika kunci tersebut ada dan ditetapkan ke true, hal ini menunjukkan bahwa
     aplikasi telah memanggil
     metode
     SetReplaceAll(). Untuk informasi selengkapnya tentang
      konfigurasi EmojiCompat,
      lihat bagian Opsi konfigurasi
     .
    
    Setelah menerima kunci di
    paket EditorInfo.extras,
    keyboard dapat menggunakan
    metode hasEmojiGlyph()
    di mana metadataVersion adalah nilai untuk
    EDITOR_INFO_METAVERSION_KEY,
    untuk memeriksa apakah aplikasi dapat merender emoji tertentu.
Menggunakan EmojiCompat dengan widget kustom
    Anda selalu dapat menggunakan metode process()
    untuk melakukan memproses CharSequence lebih dulu di aplikasi Anda dan menambahkannya
    ke widget mana pun yang dapat merender instance Spanned;
    misalnya, TextView. Selain itu,
    EmojiCompat menyediakan class helper widget
    berikut agar Anda dapat memperkaya widget kustom dengan
    dukungan emoji tanpa susah payah.
  
- Contoh TextView
- Contoh EditText
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Pertanyaan umum (FAQ)
- Bagaimana cara memulai download font?
- Berapa lama waktu yang diperlukan untuk melakukan inisialisasi?
- Berapa banyak memori yang digunakan oleh support library EmojiCompat?
- Dapatkah saya menggunakan EmojiCompat untuk TextView kustom?
- Apa yang terjadi jika saya menambahkan widget dalam XML tata letak pada perangkat yang berjalan di Android 4.4 (API level 19) atau yang lebih lama?
Font emoji didownload pada permintaan pertama, jika font tersebut tidak ada di perangkat. Penjadwalan download bersifat transparan untuk aplikasi.
Setelah font didownload, diperlukan sekitar 150 milidetik
       untuk menginisialisasi EmojiCompat.
Saat ini, struktur data untuk menemukan emoji dimuat di memori aplikasi dan menggunakan sekitar 200 KB.
Ya. EmojiCompat menyediakan class helper untuk widget kustom. Anda juga dapat
       memproses string tertentu lebih dulu dan mengubahnya menjadi
       Spanned. Untuk informasi selengkapnya tentang class helper
       widget, lihat bagian
     Menggunakan EmojiCompat dengan widget kustom.
       
Anda dapat menyertakan support library EmojiCompat
       atau widget-nya di aplikasi yang mendukung perangkat yang
       menjalankan Android 4.4 (API level 19) atau yang lebih lama. Namun, jika perangkat berjalan
       pada versi Android sebelum API level 19,
       EmojiCompat dan widget-nya berada dalam status
       "tidak beroperasi". Ini berarti bahwa
       EmojiTextView berperilaku sama
       seperti TextView biasa.
        Instance EmojiCompat; status
       LOAD_STATE_SUCCEEDED
       akan langsung dicapai
       saat Anda memanggil
       metode
       init().
    
Referensi lainnya
  Untuk informasi tambahan tentang penggunaan
  library EmojiCompat,
  tonton EmojiCompat.
  
 
  