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

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

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

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

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

উদাহরণ সংস্করণ
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (সেপ্টেম্বর 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (সেপ্টেম্বর 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (মার্চ 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (অক্টোবর 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (ফেব্রুয়ারি 2019)

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

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

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

আপনি যদি একটি কাস্টম ইমোজি সলিউশন ব্যবহার করেন বা অন্য কোনো কারণে কম্পোজে ডিফল্ট ইমোজি রেজোলিউশন অক্ষম করতে চান, তাহলে আপনি 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 ব্যবহার করতে পারেন। আপনি যখন টেক্সট কম্পোজেবল ব্যবহার করেন তখন ইমোজিগুলি 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 }
                        )
                    }
                }
            }
        )
    }
}

বিস্তারিত জানার জন্য Interoperability APIs ডকুমেন্টেশন দেখুন।

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

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

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}