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

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

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

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

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

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

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

এই সাপোর্টের জন্য আপনার অ্যাপে কোনও পরিবর্তনের প্রয়োজন নেই — যদি আপনি Text and 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 নির্দেশাবলী ছাড়াই 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 থেকে প্রসারিত হয়, তাহলে আপনি composable ফাংশন কল করার জন্য ComposeView ব্যবহার করতে পারেন। আপনি যখন Text composables ব্যবহার করেন তখন ইমোজিগুলি 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 ডকুমেন্টেশন দেখুন।

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

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

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}