نمایش ایموجی

مجموعه استاندارد ایموجی‌ها سالانه توسط یونیکد به‌روزرسانی می‌شود، زیرا استفاده از ایموجی‌ها برای انواع برنامه‌ها به سرعت در حال افزایش است.

اگر برنامه شما محتوای اینترنتی را نمایش می‌دهد یا ورودی متن ارائه می‌دهد، اکیداً توصیه می‌کنیم از جدیدترین فونت‌های ایموجی پشتیبانی کنید. در غیر این صورت، ایموجی‌های جدیدتر ممکن است به صورت یک کادر مربع کوچک به نام توفو (☐) یا سایر توالی‌های ایموجی نادرست نمایش داده شوند.

نسخه‌های اندروید ۱۱ (سطح API 30) و پایین‌تر نمی‌توانند فونت ایموجی را به‌روزرسانی کنند، بنابراین برنامه‌هایی که آنها را در این نسخه‌ها نمایش می‌دهند باید به‌صورت دستی به‌روزرسانی شوند.

در ادامه نمونه‌هایی از ایموجی‌های مدرن آمده است.

مثال‌ها نسخه
🫩 🪉 🇨🇶 ۱۶.۰ (سپتامبر ۲۰۲۴)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 ۱۵.۱ (سپتامبر ۲۰۲۳)
🩷 🫸🏼 🐦‍⬛ ۱۵.۰ (سپتامبر ۲۰۲۲)
🫠 🫱🏼‍🫲🏿 🫰🏽 ۱۴.۰ (سپتامبر ۲۰۲۱)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 ۱۳.۱ (سپتامبر ۲۰۲۰)
🥲 🥷🏿 🐻‍❄️ ۱۳.۰ (مارس ۲۰۲۰)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 ۱۲.۱ (اکتبر ۲۰۱۹)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 ۱۲.۰ (فوریه ۲۰۱۹)

عرضه اولیه (BOM) در مارس ۲۰۲۳ ( رابط کاربری Compose 1.4 ) پشتیبانی از جدیدترین نسخه ایموجی‌ها ، از جمله سازگاری با نسخه‌های قدیمی‌تر اندروید تا API 21 را به ارمغان می‌آورد.

این پشتیبانی نیازی به تغییر در برنامه شما ندارد - اگر از 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
        )/* ... */
    )
)

قابلیت همکاری

اگر برنامه شما از هر دو Views و Compose در یک Activity استفاده می‌کند، مطمئن شوید که از APIهای مناسب برای پیکربندی صحیح ایموجی‌ها استفاده می‌کنید. بخش‌های زیر زمان استفاده از هر API را شرح می‌دهند.

گسترش از ComponentActivity

اگر Activity شما به جای AppCompatActivity از Compose ComponentActivity امتداد می‌یابد، دستورالعمل‌های مربوط به ایموجی Support بدون AppCompat را دنبال کنید.

از آنجایی که شما AppCompatActivity ارث‌بری نمی‌کنید، کتابخانه Emoji2 را به وابستگی‌های خود اضافه کنید و به جای ویجت TextView ، از EmojiTextView در viewهای خود استفاده کنید، همانطور که در قطعه کد زیر نشان داده شده است:

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 برای فراخوانی توابع composable استفاده کنید. وقتی از composableهای Text استفاده می‌کنید، ایموجی‌ها به درستی در نسخه‌های مختلف اندروید رندر می‌شوند.

اگر از AppCompatActivity ارث‌بری می‌کنید، TextView از XML inflate کنید تا ایموجی‌ها به درستی رندر شوند.

این در صورتی صدق می‌کند که شما در حال افزایش حجم 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
                        }
                    }
                }
            }
        )
    }
}

برای پر کردن متن با AndroidView درون ComposeView ، از 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های تعامل‌پذیری مراجعه کنید.

عیب‌یابی

اگر به جای ایموجی، توفو (☐) را می‌بینید، ابتدا بررسی کنید که آیا مشکل از دستگاه آزمایشی خاص شماست یا خیر. چند نکته اصلی وجود دارد که می‌توانید بررسی کنید:

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}