ইমোজি প্রদর্শন করুন

যেহেতু সব ধরনের অ্যাপে ইমোজির ব্যবহার দ্রুত বাড়ছে, তাই ইউনিকোড প্রতি বছর ইমোজির প্রমিত সেটটি হালনাগাদ করে

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

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

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

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

BOM মার্চ ২০২৩ ( Compose UI 1.4 ) সর্বশেষ ইমোজি সংস্করণের জন্য সমর্থন নিয়ে এসেছে, যার মধ্যে API 21 পর্যন্ত পুরোনো অ্যান্ড্রয়েড সংস্করণগুলোর সাথে পশ্চাৎ সামঞ্জস্যতাও অন্তর্ভুক্ত রয়েছে।

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

আপনার অ্যাপে সর্বশেষ ইমোজিগুলো পরীক্ষা করার সবচেয়ে ভালো উপায় হলো এপিআই ৩০ বা তার নিচের সংস্করণের একটি আসল ডিভাইস ব্যবহার করা।

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

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

আন্তঃকার্যক্ষমতা

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

ComponentActivity থেকে সম্প্রসারণ

আপনার Activity যদি AppCompatActivity এর পরিবর্তে Compose ComponentActivity থেকে extend করা হয়, তাহলে AppCompat ছাড়া Support ইমোজির নির্দেশাবলী অনুসরণ করুন।

যেহেতু আপনি 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 ব্যবহার করে কম্পোজেবল ফাংশন কল করতে পারেন। টেক্সট কম্পোজেবল ব্যবহার করলে সব অ্যান্ড্রয়েড ভার্সনে ইমোজিগুলো সঠিকভাবে রেন্ডার হয়।

আপনি যদি 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 }
                        )
                    }
                }
            }
        )
    }
}

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

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

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

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}