نمایش ایموجی

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

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

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

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

نمونه ها نسخه
🫠 🏼‍🫲🏿 🫰🏽 14.0 (سپتامبر 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (سپتامبر 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (مارس 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (اکتبر 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (فوریه 2019)

BOM March 2023 ( 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
        )/* ... */
    )
)

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

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

گسترش از ComponentActivity

اگر Activity شما از Compose 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 برای فراخوانی توابع قابل ترکیب استفاده کنید. هنگامی که از Text composables استفاده می کنید، شکلک ها در نسخه های 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 }
                        )
                    }
                }
            }
        )
    }
}

برای جزئیات به مستندات APIهای تعاملی مراجعه کنید.

عیب یابی

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

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}