EmojiCompat
सहायता लाइब्रेरी का मकसद, Android डिवाइसों को नए इमोजी के साथ अप-टू-डेट रखना है. इससे आपके ऐप्लिकेशन में, ☐ के तौर पर इमोजी के मौजूद न होने की जानकारी नहीं दिखती. इससे पता चलता है कि आपके डिवाइस में टेक्स्ट दिखाने के लिए फ़ॉन्ट नहीं है. EmojiCompat
सपोर्ट लाइब्रेरी का इस्तेमाल करने पर, आपके ऐप्लिकेशन के उपयोगकर्ताओं को नए इमोजी पाने के लिए, Android OS के अपडेट का इंतज़ार नहीं करना पड़ता.
इस बारे में ज़्यादा जानने के लिए, यहां दिए गए लेख पढ़ें:
EmojiCompat कैसे काम करता है?
EmojiCompat
सहायता लाइब्रेरी, Android 4.4 (एपीआई लेवल 19) और इसके बाद के वर्शन वाले डिवाइसों पर, बैकवर्ड-कंपैटिबल इमोजी की सुविधा लागू करने के लिए क्लास उपलब्ध कराती है. EmojiCompat
को, बंडल किए गए या डाउनलोड किए जा सकने वाले फ़ॉन्ट में से किसी एक के साथ कॉन्फ़िगर किया जा सकता है. कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, यहां दिए गए सेक्शन देखें:
EmojiCompat
, किसी दिए गए CharSequence
के लिए इमोजी की पहचान करता है. साथ ही, ज़रूरत पड़ने पर उन्हें EmojiSpans
से बदल देता है और आखिर में इमोजी ग्लिफ़ को रेंडर करता है. दूसरी इमेज में इस प्रोसेस के बारे में बताया गया है.
डाउनलोड किए जा सकने वाले फ़ॉन्ट का कॉन्फ़िगरेशन
डाउनलोड किए जा सकने वाले फ़ॉन्ट कॉन्फ़िगरेशन में, इमोजी फ़ॉन्ट डाउनलोड करने के लिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सहायता वाली लाइब्रेरी की सुविधा का इस्तेमाल किया जाता है. यह ज़रूरी इमोजी मेटाडेटा को भी अपडेट करता है. EmojiCompat
के साथ काम करने वाली लाइब्रेरी को, यूनिकोड के स्पेसिफ़िकेशन के नए वर्शन के साथ अप-टू-डेट रहने के लिए, इस मेटाडेटा की ज़रूरत होती है.
सहायता लाइब्रेरी की डिपेंडेंसी जोड़ना
EmojiCompat
सहायता लाइब्रेरी का इस्तेमाल करने के लिए, आपको अपने डेवलपमेंट एनवायरमेंट में, अपने ऐप्लिकेशन प्रोजेक्ट की क्लासपथ डिपेंडेंसी में बदलाव करना होगा.
अपने ऐप्लिकेशन प्रोजेक्ट में सहायता लाइब्रेरी जोड़ने के लिए:
- अपने ऐप्लिकेशन की
build.gradle
फ़ाइल खोलें. - सहायता लाइब्रेरी को
dependencies
सेक्शन में जोड़ें.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
डाउनलोड किए जा सकने वाले फ़ॉन्ट के कॉन्फ़िगरेशन को शुरू करना
मेटाडेटा और टाइपफ़ेस को लोड करने के लिए, आपको EmojiCompat
को शुरू करना होगा. शुरू करने में कुछ समय लग सकता है, इसलिए शुरू करने की प्रोसेस, बैकग्राउंड थ्रेड पर चलती है.
डाउनलोड किए जा सकने वाले फ़ॉन्ट कॉन्फ़िगरेशन के साथ EmojiCompat
को शुरू करने के लिए, यह तरीका अपनाएं:
FontRequest
क्लास का एक इंस्टेंस बनाएं और फ़ॉन्ट उपलब्ध कराने वाली संस्था, फ़ॉन्ट उपलब्ध कराने वाला पैकेज, फ़ॉन्ट क्वेरी, और सर्टिफ़िकेट के लिए हैश के सेट की सूची दें.FontRequest
के बारे में ज़्यादा जानकारी के लिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट के दस्तावेज़ में, डाउनलोड किए जा सकने वाले फ़ॉन्ट को प्रोग्राम के हिसाब से इस्तेमाल करना सेक्शन देखें.FontRequestEmojiCompatConfig
का एक इंस्टेंस बनाएं औरContext
औरFontRequest
के इंस्टेंस दें.init()
तरीके को कॉल करकेEmojiCompat
को शुरू करें औरFontRequestEmojiCompatConfig
का इंस्टेंस पास करें.- लेआउट एक्सएमएल में
EmojiCompat
विजेट का इस्तेमाल करें. अगरAppCompat
का इस्तेमाल किया जा रहा है, तो AppCompat के साथ EmojiCompat विजेट इस्तेमाल करना सेक्शन देखें.
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"/>
डाउनलोड किए जा सकने वाले फ़ॉन्ट कॉन्फ़िगरेशन के साथ EmojiCompat
को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानने के लिए, इमोजी के साथ काम करने वाले सैंपल ऐप्लिकेशन Java
| Kotlin पर जाएं.
लाइब्रेरी कॉम्पोनेंट
- विजेट:
EmojiEditText
,EmojiTextView
,EmojiButton
EmojiCompat
का इस्तेमाल करने के लिए, डिफ़ॉल्ट विजेट लागू करने के तरीकेTextView
,EditText
, औरButton
के साथ.EmojiCompat
- सहायता लाइब्रेरी का मुख्य सार्वजनिक प्लैटफ़ॉर्म. यह सभी बाहरी कॉल करता है और सिस्टम के अन्य हिस्सों के साथ काम करता है.
EmojiCompat.Config
- सिंगलटन इंस्टेंस को कॉन्फ़िगर करता है.
EmojiSpan
-
ReplacementSpan
सबक्लास, जो वर्ण (सीक्वेंस) को बदलता है और ग्लिफ़ को रेंडर करता है. EmojiCompat
फ़ॉन्टEmojiCompat
, इमोजी दिखाने के लिए फ़ॉन्ट का इस्तेमाल करता है. यह फ़ॉन्ट, Android इमोजी फ़ॉन्ट का बदला हुआ वर्शन है. फ़ॉन्ट में इस तरह बदलाव किया गया है:- इमोजी को रेंडर करने के लिए, सभी इमोजी के वर्णों को यूनिकोड के पूरक निजी इस्तेमाल वाले एरिया-A में एक यूनिकोड कोड पॉइंट के साथ दिखाया जाता है. यह कोड पॉइंट U+F0001 से शुरू होता है.
-
अतिरिक्त इमोजी मेटाडेटा को फ़ॉन्ट में बाइनरी फ़ॉर्मैट में डाला जाता है और इसे
EmojiCompat
के ज़रिए रनटाइम पर पार्स किया जाता है. डेटा को फ़ॉन्ट कीmeta
टेबल में एम्बेड किया गया है. साथ ही, इसे निजी टैग Emji के साथ जोड़ा गया है.
कॉन्फ़िगरेशन के विकल्प
EmojiCompat
के व्यवहार में बदलाव करने के लिए, EmojiCompat
इंस्टेंस का इस्तेमाल किया जा सकता है. कॉन्फ़िगरेशन सेट करने के लिए,
बेस क्लास के इन तरीकों का इस्तेमाल किया जा सकता है:
setReplaceAll()
: यह तय करता है किEmojiCompat
को मिले सभी इमोजी को,EmojiSpans
से बदलना चाहिए या नहीं. डिफ़ॉल्ट रूप से,EmojiCompat
यह समझने की पूरी कोशिश करता है कि सिस्टम किसी इमोजी को रेंडर कर सकता है या नहीं. अगर ऐसा नहीं हो पाता है, तो वह उन इमोजी को बदलता नहीं है.true
पर सेट होने पर,EmojiCompat
उन सभी इमोजी कोEmojiSpans
से बदल देता है जो उसे मिलते हैं.setEmojiSpanIndicatorEnabled()
: इससे पता चलता है किEmojiCompat
ने किसी इमोजी को किसीEmojiSpan
से बदला है या नहीं.true
पर सेट होने पर,EmojiCompat
,EmojiSpan
के लिए बैकग्राउंड बनाता है. इस तरीके का इस्तेमाल मुख्य रूप से, डीबग करने के लिए किया जाता है.setEmojiSpanIndicatorColor()
:EmojiSpan
को दिखाने के लिए रंग सेट करता है. डिफ़ॉल्ट वैल्यूGREEN
है.registerInitCallback
: ऐप्लिकेशन को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() {...})
शुरू करने के लिए लिसनर जोड़ना
EmojiCompat
और
EmojiCompat
क्लास,
इनिशियलाइज़ेशन कॉलबैक को रजिस्टर करने के लिए,
registerInitCallback()
और
unregisterInitCallback()
तरीके उपलब्ध कराती हैं. इन तरीकों का इस्तेमाल करने के लिए, EmojiCompat.InitCallback
क्लास का एक इंस्टेंस बनाएं. इन तरीकों को कॉल करें और EmojiCompat.InitCallback
क्लास का इंस्टेंस पास करें. जब EmojiCompat
सहायता वाली लाइब्रेरी को शुरू करने की प्रोसेस पूरी हो जाती है, तो EmojiCompat
क्लास onInitialized()
तरीके को कॉल करती है. अगर लाइब्रेरी शुरू नहीं होती है, तो EmojiCompat
क्लास, onFailed()
तरीके को कॉल करती है.
किसी भी समय शुरू करने की स्थिति देखने के लिए, getLoadState()
विधि को कॉल करें. यह इनमें से कोई एक वैल्यू दिखाता है:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
या
LOAD_STATE_FAILED
.
AppCompat विजेट के साथ EmojiCompat का इस्तेमाल करना
अगर AppCompat widgets
का इस्तेमाल किया जा रहा है, तो EmojiCompat
से जुड़े EmojiCompat
विजेट इस्तेमाल किए जा सकते हैं.AppCompat widgets
- सहायता लाइब्रेरी को डिपेंडेंसी सेक्शन में जोड़ें.
Groovy
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Groovy
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- लेआउट एक्सएमएल में
EmojiCompat
AppCompat Widget
विजेट का इस्तेमाल करें.
<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"/>
बंडल किए गए फ़ॉन्ट का कॉन्फ़िगरेशन
EmojiCompat
सहायता लाइब्रेरी, बंडल किए गए फ़ॉन्ट वर्शन में भी उपलब्ध है. इस पैकेज में, एम्बेड किए गए मेटाडेटा वाला फ़ॉन्ट शामिल होता है. पैकेज में एक
BundledEmojiCompatConfig
भी शामिल होता है, जो मेटाडेटा और फ़ॉन्ट को लोड करने के लिए AssetManager
का इस्तेमाल करता है.
ध्यान दें: फ़ॉन्ट का साइज़ कई मेगाबाइट में होता है.
सहायता लाइब्रेरी की डिपेंडेंसी जोड़ना
बंडल किए गए फ़ॉन्ट कॉन्फ़िगरेशन के साथ EmojiCompat
सहायता लाइब्रेरी का इस्तेमाल करने के लिए, आपको अपने डेवलपमेंट एनवायरमेंट में अपने ऐप्लिकेशन प्रोजेक्ट की क्लासपथ डिपेंडेंसी में बदलाव करना ज़रूरी है.
अपने ऐप्लिकेशन प्रोजेक्ट में सहायता लाइब्रेरी जोड़ने के लिए:
- अपने ऐप्लिकेशन की
build.gradle
फ़ाइल खोलें. - सहायता लाइब्रेरी को
dependencies
सेक्शन में जोड़ें.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
EmojiCompat को कॉन्फ़िगर करने के लिए, बंडल किए गए फ़ॉन्ट का इस्तेमाल करना
EmojiCompat
को कॉन्फ़िगर करने के लिए, बंडल किए गए फ़ॉन्ट का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
EmojiCompat
का इंस्टेंस बनाने औरContext
का इंस्टेंस देने के लिए,BundledEmojiCompatConfig
का इस्तेमाल करें.EmojiCompat
को शुरू करने के लिए,init()
तरीके को कॉल करें औरBundledEmojiCompatConfig
का उदाहरण पास करें.
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); ... } }
विजेट के बिना EmojiCompat का इस्तेमाल करना
EmojiCompat
, सही इमेज रेंडर करने के लिए
EmojiSpan
का इस्तेमाल करता है.
इसलिए, इसे किसी भी दिए गए CharSequence
को
EmojiSpans
के साथ
Spanned
इंस्टेंस में बदलना होगा. EmojiCompat
क्लास, EmojiSpans
की मदद से CharSequences
को Spanned
इंस्टेंस में बदलने का तरीका उपलब्ध कराती है. इस तरीके का इस्तेमाल करके,
रॉ स्ट्रिंग के बजाय प्रोसेस किए गए इंस्टेंस को प्रोसेस और कैश किया जा सकता है. इससे, आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
IME के लिए EmojiCompat का इस्तेमाल करना
EmojiCompat
सहायता लाइब्रेरी का इस्तेमाल करके, कीबोर्ड उन इमोजी को रेंडर कर सकते हैं जिनका इस्तेमाल, उस ऐप्लिकेशन में किया जा सकता है जिससे इंटरैक्ट किया जा रहा है. IMEs, hasEmojiGlyph()
तरीके का इस्तेमाल करके यह पता लगा सकते हैं कि EmojiCompat
, इमोजी को रेंडर कर सकता है या नहीं. यह तरीका, किसी इमोजी का CharSequence
लेता है और अगर EmojiCompat
उस इमोजी का पता लगाकर उसे रेंडर कर सकता है, तो true
दिखाता है.
कीबोर्ड, ऐप्लिकेशन के साथ काम करने वाली
EmojiCompat
सहायता लाइब्रेरी का वर्शन भी देख सकता है. इससे यह तय किया जा सकता है कि पैलेट में कौनसा इमोजी रेंडर करना है. वर्शन की जांच करने के लिए, अगर उपलब्ध हो, तो कीबोर्ड को यह देखना होगा कि EditorInfo.extras
बंडल में ये बटन मौजूद हैं या नहीं:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
अगर बंडल में कुंजी मौजूद है, तो वैल्यू उस इमोजी मेटाडेटा के वर्शन को दिखाती है जिसका इस्तेमाल ऐप्लिकेशन करता है. अगर यह कुंजी मौजूद नहीं है, तो इसका मतलब है कि ऐप्लिकेशन EmojiCompat
का इस्तेमाल नहीं कर रहा है.
अगर पासकोड मौजूद है और उसे true
पर सेट किया गया है, तो इससे पता चलता है कि ऐप्लिकेशन ने SetReplaceAll()
तरीके को कॉल किया है. EmojiCompat
कॉन्फ़िगरेशन के बारे में ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन के विकल्प सेक्शन देखें.
EditorInfo.extras
बंडल में कुंजियां मिलने के बाद, कीबोर्ड hasEmojiGlyph()
वाला तरीका इस्तेमाल कर सकता है. इसमें metadataVersion
, EDITOR_INFO_METAVERSION_KEY
की वैल्यू होती है. इसकी मदद से यह पता लगाया जा सकता है कि ऐप्लिकेशन किसी खास इमोजी को रेंडर कर सकता है या नहीं.
कस्टम विजेट के साथ EmojiCompat का इस्तेमाल करना
अपने ऐप्लिकेशन में CharSequence
को प्रीप्रोसेस करने के लिए, process()
तरीके का इस्तेमाल कभी भी किया जा सकता है. साथ ही, इसे किसी भी ऐसे विजेट में जोड़ा जा सकता है जो Spanned
इंस्टेंस को रेंडर कर सकता है. उदाहरण के लिए, TextView
. इसके अलावा,
EmojiCompat
ये विजेट के लिए मदद करने वाली क्लास उपलब्ध कराता है, ताकि आप कम से कम मेहनत करके, अपने कस्टम विजेट को इमोजी की सुविधा से बेहतर बना सकें.
- TextView का सैंपल
- 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() { ... } }
अक्सर पूछे जाने वाले सवाल
- मैं फ़ॉन्ट डाउनलोड करने की प्रोसेस कैसे शुरू करूं?
- इसे शुरू होने में कितना समय लगता है?
- EmojiCompat सहायता लाइब्रेरी कितनी मेमोरी का इस्तेमाल करती है?
- क्या कस्टम TextView के लिए EmojiCompat का इस्तेमाल किया जा सकता है?
- Android 4.4 (एपीआई लेवल 19) या इससे पहले के वर्शन पर काम करने वाले डिवाइसों पर, लेआउट एक्सएमएल में विजेट जोड़ने पर क्या होगा?
अगर डिवाइस पर इमोजी फ़ॉन्ट मौजूद नहीं हैं, तो इन्हें पहली बार अनुरोध करने पर डाउनलोड किया जाता है. डाउनलोड शेड्यूलिंग की जानकारी, ऐप्लिकेशन के लिए साफ़ तौर पर दिखती है.
फ़ॉन्ट डाउनलोड होने के बाद, EmojiCompat
को शुरू करने में करीब 150 मिलीसेकंड लगते हैं.
फ़िलहाल, इमोजी ढूंढने के लिए डेटा स्ट्रक्चर, ऐप्लिकेशन की स्मृति में लोड किया जाता है और इसमें करीब 200 केबी का इस्तेमाल होता है.
हां. EmojiCompat, कस्टम विजेट के लिए हेल्पर क्लास उपलब्ध कराता है. किसी दी गई स्ट्रिंग को पहले से प्रोसेस करके, उसे Spanned
में बदला भी जा सकता है. विजेट हेल्पर क्लास के बारे में ज़्यादा जानकारी के लिए, कस्टम विजेट के साथ EmojiCompat का इस्तेमाल करना
सेक्शन देखें.
EmojiCompat
सहायता लाइब्रेरी या उसके विजेट को उन ऐप्लिकेशन में शामिल किया जा सकता है जो Android 4.4 (एपीआई लेवल 19) या इससे पहले के वर्शन पर काम करने वाले डिवाइसों पर काम करते हैं. हालांकि, अगर कोई डिवाइस एपीआई लेवल 19 से पहले के Android वर्शन पर काम करता है, तो EmojiCompat
और उसके विजेट "काम नहीं कर रहे हैं" स्थिति में होंगे. इसका मतलब है कि
EmojiTextView
, एक सामान्य TextView
के जैसे ही काम करता है.
EmojiCompat
इंस्टेंस; init()
तरीका कॉल करने पर, यह तुरंत LOAD_STATE_SUCCEEDED
स्थिति में आ जाता है.
अन्य संसाधन
EmojiCompat
लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, EmojiCompat देखें.