इमोजी दिखाएं

इमोजी के इस्तेमाल में तेज़ी से बढ़ोतरी हो रही है. इसलिए, यूनिकोड हर साल इमोजी के स्टैंडर्ड सेट को refreshed annually by रीफ़्रेश करता है. यह सेट, सभी तरह के ऐप्लिकेशन के लिए होता है.

अगर आपका ऐप्लिकेशन, इंटरनेट का कॉन्टेंट दिखाता है या उसमें टेक्स्ट डालने की सुविधा है, तो हमारा सुझाव है कि इमोजी के नए फ़ॉन्ट इस्तेमाल किए जाएं. ऐसा न करने पर, नए इमोजी टोफ़ू (☐) नाम के छोटे स्क्वेयर बॉक्स या गलत तरीके से रेंडर किए गए इमोजी के क्रम के तौर पर दिख सकते हैं.

Android के वर्शन 11 (एपीआई लेवल 30) और इससे पुराने वर्शन में, इमोजी के फ़ॉन्ट को अपडेट नहीं किया जा सकता. इसलिए, इन वर्शन पर दिखने वाले ऐप्लिकेशन को मैन्युअल तरीके से अपडेट करना होगा.

यहां आधुनिक इमोजी के उदाहरण दिए गए हैं.

उदाहरण वर्शन
🫩 🪉 🇨🇶 16.0 (सितंबर 2024)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 15.1 (सितंबर 2023)
🩷 🫸🏼 🐦‍⬛ 15.0 (सितंबर 2022)
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (सितंबर 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (सितंबर 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (मार्च 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (अक्टूबर 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (फ़रवरी 2019)

BOM मार्च 2023 (Compose UI 1.4) में, इमोजी के नए वर्शन के लिए सहायता उपलब्ध है. इसमें, Android के पुराने वर्शन के साथ बैकवर्ड कंपैटिबिलिटी भी शामिल है. यह सुविधा, एपीआई 21 तक के वर्शन के लिए उपलब्ध है.

इसके लिए, आपको अपने ऐप्लिकेशन में कोई बदलाव नहीं करना होगा— अगर Text और TextField (Material 2 या Material 3) या BasicText और BasicTextField का इस्तेमाल किया जाता है, तो आपको आधुनिक इमोजी के लिए सहायता तुरंत मिल जाती है.

अपने ऐप्लिकेशन में नए इमोजी की जांच करने का सबसे अच्छा तरीका है कि एपीआई 30 या इससे पुराने वर्शन वाले किसी असली डिवाइस का इस्तेमाल किया जाए.

अगर इमोजी के लिए, पसंद के मुताबिक बनाए गए किसी समाधान का इस्तेमाल किया जा रहा है या Compose में डिफ़ॉल्ट तौर पर सेट किए गए इमोजी रिज़ॉल्यूशन को किसी अन्य वजह से बंद करना है, तो PlatformTextStyle(emojiSupportMatch) का इस्तेमाल किया जा सकता है:

Text(
    text = "Hello $EMOJI_TEXT",
    style = TextStyle(
        platformStyle = PlatformTextStyle(
            emojiSupportMatch = EmojiSupportMatch.None
        )/* ... */
    )
)

इंटरोऑपरेबिलिटी

अगर आपका ऐप्लिकेशन, एक ही Activity में Views और Compose, दोनों का इस्तेमाल करता है, तो पक्का करें कि इमोजी को सही तरीके से कॉन्फ़िगर करने के लिए, सही एपीआई का इस्तेमाल किया जा रहा हो. यहां दिए गए सेक्शन में, यह बताया गया है कि किस एपीआई का इस्तेमाल कब करना चाहिए.

ComponentActivity से एक्सटेंड करना

अगर आपकी Activity Compose ComponentActivity से एक्सटेंड होती है, न कि AppCompatActivity से, तो AppCompat के बिना इमोजी की सुविधा इस्तेमाल करने के लिए दिए गए निर्देशों का पालन करें.

अगर AppCompatActivity से एक्सटेंड नहीं किया जा रहा है, तो अपनी डिपेंडेंसी में Emoji2 library जोड़ें. साथ ही, अपने व्यू में EmojiTextView का इस्तेमाल करें TextView विजेट के बजाय. इसके लिए, यहां दिया गया स्निपेट देखें:

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
            }
        }
    }
}

इसके बाद, अपनी एक्सएमएल फ़ाइल में:

<androidx.emoji2.widget.EmojiTextView
    android:id="@+id/emoji_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

AppCompatActivity से एक्सटेंड करना

अगर आपकी Activity, AppCompatActivity से एक्सटेंड होती है, तो कंपोज़ेबल फ़ंक्शन कॉल करने के लिए, ComposeView का इस्तेमाल किया जा सकता है. Text कंपोज़ेबल का इस्तेमाल करने पर, Android के सभी वर्शन में इमोजी सही तरीके से रेंडर होते हैं.

अगर AppCompatActivity से एक्सटेंड किया जा रहा है, तो एक्सएमएल से TextView को इन्फ़्लेट करें, ताकि इमोजी सही तरीके से रेंडर हो सकें.

यह तब लागू होता है, जब एक्सएमएल को इन्फ़्लेट किया जा रहा हो:

  • Activity में, ComposeView के बाहर. यहां दिए गए स्निपेट में, AppCompatActivity और TextView के इस्तेमाल पर ध्यान दें:

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
            }
        }
    }
}

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
                        }
                    }
                }
            }
        )
    }
}

ComposeView के अंदर AndroidView के साथ टेक्स्ट को इन्फ़्लेट करने के लिए, इमोजी को सही तरीके से रेंडर करने के लिए AppCompatTextView का इस्तेमाल करें:

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 }
                        )
                    }
                }
            }
        )
    }
}

ज़्यादा जानकारी के लिए, इंटरोऑपरेबिलिटी एपीआई से जुड़ा दस्तावेज़ देखें.

समस्या का हल

अगर आपको इमोजी के बजाय टोफ़ू (☐) दिख रहा है, तो सबसे पहले यह देखें कि समस्या आपके टेस्ट डिवाइस में है या नहीं. यहां कुछ मुख्य चीज़ें दी गई हैं जिनकी जांच की जा सकती है: