عرض الرموز التعبيرية

يتم تحديث المجموعة العادية من الرموز التعبيرية سنويًا من خلال Unicode نظرًا لتزايد استخدام الرموز التعبيرية بسرعة لجميع أنواع التطبيقات.

إذا كان تطبيقك يعرض محتوى على الإنترنت أو يوفر إدخال نص، ننصحك بشدة بتوفير أحدث خطوط الرموز التعبيرية. وإلا، قد يتم عرض الرموز التعبيرية اللاحقة على شكل مربّع مربّع صغير يُسمى tofu (☐) أو تسلسلات رموز تعبيرية أخرى يتم عرضها بشكل غير صحيح.

ولا يمكن للإصدارات 11 من Android (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم تعديل خط الرموز التعبيرية، لذا يجب تعديل خط الرموز التعبيرية يدويًا على التطبيقات التي تعرضها على هذه الإصدارات.

في ما يلي أمثلة على الرموز التعبيرية الحديثة.

أمثلة الإصدار
🫠 🫱🏼 🫲🏿 🫰🏽 14.0 (أيلول/سبتمبر 2021)
⬅ 🌫️ 🧔─ ♀️ 🧑🏿 ❤️ 🧑🏾 13.1 (أيلول/سبتمبر 2020)
🥲 🥷🏿 🐻 َع️ 13.0 (آذار/مارس 2020)
🧑 🦰 🧑🏿 🦯 شاركونا 🤝 ・🏼 12.1 (تشرين الأول/أكتوبر 2019)
🦩 🦻🏿 لإضافة🏼 🤝 التقويم 12.0 (شباط/ فبراير 2019)

BOM آذار (مارس) 2023 (الإصدار 1.4 من واجهة المستخدم Compose) يوفّر أحدث إصدار من الرموز التعبيرية، بما في ذلك التوافق مع الأنظمة القديمة مع إصدارات Android القديمة وصولاً إلى واجهة برمجة التطبيقات 21.

ولا يتطلّب هذا الدعم إجراء أي تغييرات على تطبيقك. إذا كنت تستخدم Text وTextField (المادة 2 أو المادة 3) أو BasicText وBasicTextField، ستحصل على دعم حديث باستخدام الرموز التعبيرية.

إنّ أفضل طريقة لاختبار أحدث الرموز التعبيرية في تطبيقك هي استخدام جهاز حقيقي على المستوى 30 من واجهة برمجة التطبيقات أو مستوى أقل.

إذا كنت تستخدم حلاً مخصّصًا للرموز التعبيرية أو كنت بحاجة إلى إيقاف درجة دقة الرموز التعبيرية التلقائية في Compose لأي سبب آخر، يمكنك استخدام PlatformTextStyle(emojiSupportMatch):

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

التوافقية

إذا كان تطبيقك يستخدم "طريقة العرض" و"الإنشاء" في Activity نفسه، يُرجى التأكّد من استخدام واجهات برمجة التطبيقات المناسبة لإعداد الرموز التعبيرية بشكل صحيح. تصف الأقسام التالية متى تستخدم كل واجهة برمجة تطبيقات.

التمديد من ComponentActivity

إذا كان Activity يمتد من "إنشاء" ComponentActivity بدلاً من AppCompatActivity، اتّبِع تعليمات الرموز التعبيرية للدعم بدون AppCompat.

بما أنّك لا توسِّع نطاق AppCompatActivity، أضِف مكتبة الرموز التعبيرية 2 إلى العناصر الاعتمادية التابعة لك واستخدِم EmojiTextView في طرق العرض بدلاً من التطبيق المصغّر TextView، كما هو موضّح في المقتطف التالي:

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 }
                        )
                    }
                }
            }
        )
    }
}

راجِع وثائق واجهات برمجة تطبيقات إمكانية التشغيل التفاعلي للحصول على مزيد من التفاصيل.

تحديد المشاكل وحلّها

إذا ظهر لك الرمز tofu (☐) بدلاً من الرمز التعبيري، تأكَّد أولاً مما إذا كانت المشكلة هي جهازك الاختباري المحدَّد. وفي ما يلي بعض النقاط الأساسية التي يمكنك التحقّق منها: