نمایش اموجی

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

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

نسخه‌های Android 11 (سطح API 30) و پایین‌تر نمی‌توانند قلم اموجی را به‌روز کنند، بنابراین برنامه‌هایی که اموجی‌ها را در این نسخه‌ها نمایش می‌دهند باید به‌صورت دستی به‌روز شوند.

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

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

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

این پشتیبانی نیازی به تغییر در برنامه شما ندارد— اگر از Text و TextField (Material 2 یا Material 3) یا BasicText و BasicTextField استفاده می‌کنید، بدون نیاز به کار اضافی از پشتیبانی اموجی مدرن بهره‌مند می‌شوید.

بهترین راه برای آزمایش جدیدترین اموجی‌ها در برنامه‌تان استفاده از دستگاهی واقعی با API 30 یا پایین‌تر است.

اگر از راه‌حل اموجی سفارشی استفاده می‌کنید یا به هر دلیل دیگری نیاز دارید وضوح اموجی پیش‌فرض را در «نوشتن» غیرفعال کنید، می‌توانید از PlatformTextStyle(emojiSupportMatch) استفاده کنید:

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

هم‌کنش‌پذیری

اگر برنامه شما در یک Activity از هر دو «نماها» و «ترکیب» استفاده می‌کند، مطمئن شوید که از میاناهای برنامه‌سازی کاربردی مناسب برای پیکربندی درست اموجی‌ها استفاده می‌کنید. بخش‌های زیر توضیح می‌دهند که چه زمانی از هر API استفاده کنید.

درحال گسترش از ComponentActivity

اگر Activity از «نوشتن» ComponentActivity به‌جای AppCompatActivity گسترش می‌یابد، دستورالعمل‌های پشتیبانی از اموجی بدون 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 گسترش می‌دهید، TextView را از XML باد کنید تا اموجی‌ها به‌درستی پرداز شوند.

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

برای جزئیات بیشتر، مستندات میاناهای برنامه‌سازی کاربردی قابلیت همکاری را ببینید.

عیب‌یابی

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