इमोजी दिखाएं

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

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

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

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

उदाहरण वर्शन
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (सितंबर 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (सितंबर 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (मार्च 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (अक्टूबर 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (फ़रवरी 2019)

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

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

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

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

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

इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना)

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

ComponentActivity से बढ़ाकर

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

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

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 का इस्तेमाल किया जा सकता है. टेक्स्ट कॉम्पोज़ेबल का इस्तेमाल करने पर, इमोजी सभी Android वर्शन में सही तरीके से रेंडर होते हैं.

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

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

  • ComposeView से बाहर, Activity में. नीचे दिए गए स्निपेट में, 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 }
                        )
                    }
                }
            }
        )
    }
}

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

समस्या का हल

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