ইমোজি দেখানো

ইমোজির স্ট্যান্ডার্ড সেট প্রতি বছর Unicode-এর মাধ্যমে রিফ্রেশ করা হয়, কারণ সব ধরনের অ্যাপের জন্য ইমোজির ব্যবহার দ্রুত বৃদ্ধি পাচ্ছে।

আপনার অ্যাপ যদি ইন্টারনেট কন্টেন্ট দেখায় বা টেক্সট ইনপুট প্রদান করে, তাহলে আমরা লেটেস্ট ইমোজি ফন্ট সাপোর্ট করার জন্য বিশেষভাবে সাজেস্ট করি। অন্যথায়, পরে ইমোজি ছোট বর্গাকার বক্স হিসেবে দেখানো হতে পারে যাকে টোফু (☐) বা অন্য ভুলভাবে রেন্ডার করা ইমোজি সিকোয়েন্স বলা হয়।

Android ভার্সন ১১ (API লেভেল ৩০) এবং তার আগের ভার্সনে ইমোজি ফন্ট আপডেট করা যায় না, তাই যেসব অ্যাপে এইসব ভার্সনে ইমোজি দেখানো হয় সেগুলি ম্যানুয়ালি আপডেট করতে হবে।

আধুনিক ইমোজির কিছু উদাহরণ নিচে দেওয়া হল।

উদাহরণ ভার্সন
🫩 🪉 🇨🇶 ১৬.০ (সেপ্টেম্বর ২০২৪)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 ১৫.১ (সেপ্টেম্বর ২০২৩)
🩷 🫸🏼 🐦‍⬛ 15.0 (সেপ্টেম্বর ২০২২)
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (সেপ্টেম্বর ২০২১)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 ১৩.১ (সেপ্টেম্বর ২০২০)
🥲 🥷🏿 🐻‍❄️ ১৩.০ (মার্চ ২০২০)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 ১২.১ (অক্টোবর ২০১৯)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 ১২.০ (ফেব্রুয়ারি ২০১৯)

BOM মার্চ ২০২৩ (Compose UI ১.৪) লেটেস্ট ইমোজি ভার্সন-এর জন্য সহায়তা প্রদান করে, যার মধ্যে API ২১ পর্যন্ত পুরনো Android ভার্সনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি অন্তর্ভুক্ত।

এই সহায়তার জন্য আপনার অ্যাপে কোনও পরিবর্তন করতে হবে না— আপনি Text এবং TextField (Material 2 বা Material 3) অথবা BasicText এবং BasicTextField ব্যবহার করলে, আপনি আধুনিক ইমোজি সহায়তা পাবেন।

আপনার অ্যাপে লেটেস্ট ইমোজি পরীক্ষা করার সবচেয়ে ভালো উপায় হল API 30 বা তার আগের ভার্সনে আসল ডিভাইস ব্যবহার করা।

আপনি যদি কাস্টম ইমোজি সমাধান ব্যবহার করেন বা অন্য কোনও কারণে Compose-এ ডিফল্ট ইমোজি রেজোলিউশন বন্ধ করতে চান, তাহলে আপনি PlatformTextStyle(emojiSupportMatch) ব্যবহার করতে পারেন:

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

ইন্টারঅপারেবিলিটি

আপনার অ্যাপ একই Activity-এ ভিউ ও কম্পোজ, দুটিই ব্যবহার করলে, ইমোজি সঠিকভাবে কনফিগার করার জন্য উপযুক্ত API ব্যবহার করছেন কিনা তা নিশ্চিত করুন। নিম্নলিখিত বিভাগে প্রতিটি API কখন ব্যবহার করতে হবে তা বর্ণনা করা হয়েছে।

ComponentActivity থেকে এক্সটেন্ড করা হচ্ছে

আপনার Activity যদি AppCompatActivity-এর পরিবর্তে Compose 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
            }
        }
    }
}

তারপর, আপনার XML ফাইলে:

<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 থেকে এক্সটেন্ড করলে, ইমোজি সঠিকভাবে রেন্ডার করতে XML থেকে TextView ইনফ্লেট করুন।

আপনি XML ইনফ্লেট করলে এটি প্রযোজ্য হয়:

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

বিস্তারিত জানতে ইন্টারঅপারেবিলিটি API ডকুমেন্টেশন দেখুন।

সমস্যার সমাধান

ইমোজির পরিবর্তে টোফু (☐) দেখতে পেলে, প্রথমে চেক করে দেখুন যে সমস্যাটি আপনার নির্দিষ্ট টেস্ট ডিভাইসে হচ্ছে কিনা। আপনি কয়েকটি প্রধান জিনিস চেক করে দেখতে পারেন: