إتاحة الرموز التعبيرية الحديثة

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

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

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

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

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

توفّر مكتبة androidx.emoji2:emoji2 توافقًا بسيطًا مع الأنظمة القديمة. ذات الإصدارات الأقدم من نظام التشغيل Android تعتمد مكتبة emoji2 على مكتبة AppCompat ولا تتطلب تهيئة إضافية للعمل.

إتاحة الرموز التعبيرية في ميزة Compose

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

المتطلّبات الأساسية

للتأكّد من أنّ تطبيقك يعرض الرموز التعبيرية الجديدة بشكل صحيح، عليك تشغيله على جهاز. أن يعمل بالإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم تتضمن هذه الصفحة رموزًا تعبيرية حديثة لك عرضها للاختبار.

استخدام AppCompat لإتاحة أحدث الرموز التعبيرية

AppCompat 1.4 يتضمن الدعم للرموز التعبيرية.

لاستخدام AppCompat لإتاحة الرموز التعبيرية، عليك اتّباع الخطوات التالية:

  1. تأكّد من أنّ الوحدة تعتمد على إصدار مكتبة AppCompat. 1.4.0-alpha01 أو أعلى.

    build.gradle
    
    // Ensure version is 1.4.0-alpha01 or higher.
    implementation "androidx.appcompat:appcompat.$appcompatVersion"
    
  2. تأكد من أن جميع الأنشطة التي تعرض نصًا توسّع AppCompatActivity الصف.

    Kotlin

    MyActivity.kt
    
    class MyActivity: AppCompatActivity {
    ...
    }
    

    Java

    MyActivity.java
    
    class MyActivity extends AppCompatActivity {
    ...
    }
    
  3. اختبار عملية الدمج من خلال إطلاق تطبيقك على جهاز يعمل بنظام التشغيل Android 10 أو أقل وعرض سلسلة الاختبار التالية. تأكد من أن جميع الأحرف العرض بشكل صحيح.

    • 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
    • 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲، 🥷🏿، 🐻 ويتميز
    • 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
    • 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩

يعرض تطبيقك تلقائيًا الرموز التعبيرية المتوافقة مع الأنظمة القديمة على جميع الأجهزة التي توفير موفّر خطوط قابل للتنزيل ومتوافق مع emoji2، مثل الأجهزة بواسطة خدمات Google Play.

إذا كان تطبيقك يستخدم AppCompat ولكنه يعرض التوفو (☐)

في بعض الحالات، قد يعرض تطبيقك التوفو بدلاً من الرموز التعبيرية المناسبة، حتى إذا فأنت تضيف مكتبة AppCompat. في ما يلي التفسيرات المحتملة الرائدة.

إذا كنت تشغِّل التطبيق على جهاز تم تثبيت تثبيت أحدث إصدار منه مؤخرًا أو محاكي جديد

يمكنك محو بيانات "خدمات Google Play" للتطبيق من أجل محو أي ذاكرة تخزين مؤقت للخطوط قد تحدث أثناء بدء التشغيل. ويؤدي هذا عادةً إلى حل المشكلة بعد بضع ساعات.

لمحو بيانات التطبيق، يمكنك اتّباع الخطوات التالية:

  1. افتح الإعدادات على جهازك الذي يعمل بنظام التشغيل Android.

  2. انقر على التطبيقات والإشعارات.

  3. انقر على عرض كل التطبيقات أو معلومات التطبيق.

  4. تصفَّح التطبيقات وانقر على خدمات Google Play.

  5. انقر على مساحة التخزين وذاكرة التخزين المؤقت.

  6. انقر على محو ذاكرة التخزين المؤقت.

لا يستخدم تطبيقك صفًا مرتبطًا بالنص في AppCompat

قد يحدث ذلك في حال عدم تمديد السمة AppCompatActivity أو في حال إنشاء مثيل العرض في الرمز البرمجي، مثل TextView. تحقَّق ممّا يلي:

يؤدي AppCompatActivity إلى تضخيم AppCompatTextView تلقائيًا بدلاً من TextView عند تضخيم XML، وبالتالي لن تحتاج إلى تعديل ملف XML.

لا يتيح الهاتف الاختباري استخدام الخطوط القابلة للتنزيل

تأكَّد من أنّ DefaultEmojiCompatConfig.create يعرض إعدادات غير فارغة.

لم يعمد محاكي على مستوى واجهة برمجة تطبيقات سابق إلى ترقية "خدمات Google Play"

عند استخدام محاكي على مستوى واجهة برمجة تطبيقات سابق، قد تحتاج إلى تحديث خدمات Google Play المجمّعة في emoji2 للعثور على موفِّر الخط. للقيام بذلك، سجِّل الدخول إلى "متجر Google Play" على المحاكي.

للتأكّد من تثبيت إصدار متوافق، اتّبِع الخطوات التالية:

  1. شغِّل الأمر التالي:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. تأكَّد من أنّ قيمة versionCode أعلى من 211200000.

دعم الرموز التعبيرية بدون استخدام AppCompat

إذا تعذّر على تطبيقك تضمين AppCompat، يمكنه استخدام emoji2 مباشرةً. هذا النمط تتطلب المزيد من العمل، لذلك لا تستخدم هذه الطريقة إلا إذا كان تطبيقك لا يمكنه استخدام AppCompat.

لإتاحة الرموز التعبيرية بدون مكتبة "AppCompat"، عليك اتّباع الخطوات التالية:

  1. في ملف build.gradle لتطبيقك، أضِف emoji2 وemoji2-views.

    build.gradle
    
    def emojiVersion = "1.0.0-alpha03"
    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-views:$emojiVersion"
    

    توفّر الوحدة emoji2-views فئات فرعية من TextView وButton وEditText التي يتم تنفيذها EmojiCompat عدم الاستخدام في تطبيق يتضمّن AppCompat، لأنّه يتم تنفيذه حاليًا EmojiCompat

  2. في ملف XML والرموز البرمجية، أينما كنت تستخدم TextView أو EditText أو Button—استخدام EmojiTextView, EmojiEditText، أو EmojiButton بدلاً من ذلك.

    activity_main.xml
    
    <androidx.emoji2.widget.EmojiTextView ... />
    <androidx.emoji2.widget.EmojiEditText ... />
    <androidx.emoji2.widget.EmojiButton ... />
    

    عند تضمين وحدة emoji2، يستخدم النظام الوحدة التلقائية القابلة للتنزيل. موفر الخطوط إلى تحميل خط الرموز التعبيرية تلقائيًا بعد بدء تشغيل التطبيق بفترة قصيرة. لا يلزم إجراء مزيد من التهيئة.

  3. لاختبار عملية الدمج، افتح التطبيق على جهاز يعمل بنظام التشغيل Android 11 أو أقل وعرض سلاسل الاختبار التالية. تأكد من أن جميع الأحرف العرض بشكل صحيح.

    • 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
    • 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲، 🥷🏿، 🐻 ويتميز
    • 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
    • 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩

استخدام ميزة EmojiCompat بدون التطبيقات المصغّرة

يستخدم EmojiCompat EmojiSpan من أجل لعرض الصور الصحيحة. لذلك، ينبغي لها تحويل أي كائن CharSequence في كائن Spanned يحتوي على EmojiSpan من العناصر. توفّر فئة EmojiCompat الطريقة process() لتحويل CharSequences إلى Spanned حالة. باستخدام هذه الطريقة، يمكنك استدعاء process() في الخلفية والتخزين المؤقت للنتائج، مما يحسن أداء تطبيقك.

Kotlin

val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")

Java

CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");

استخدام EmojiCompat لتحرير أسلوب الإدخال

تتيح الفئة EmojiCompat للوحات المفاتيح عرض الرموز التعبيرية المتوافقة مع التطبيق. الذين يتفاعلون معها. محرِّرو أسلوب الإدخال (أداة IME) استخدام getEmojiMatch() للتحقق مما إذا كان مثيل EmojiCompat قادرًا على عرض رمز تعبيري. تستغرق هذه الطريقة CharSequence للرمز التعبيري وتعرض true إذا كان بإمكان EmojiCompat اكتشاف الرمز التعبيري وعرضه.

يمكن للوحة المفاتيح أيضًا التحقّق من إصدار EmojiCompat الذي يتوافق مع التطبيق. لتحديد الرمز التعبيري الذي سيتم عرضه في لوحة الألوان. للتحقق من الإصدار، إذا متاحة، يمكن للوحة المفاتيح البحث عن المفاتيح التالية في EditorInfo.extras حزمة:

  • EDITOR_INFO_METAVERSION_KEY: نسخة البيانات الوصفية للرموز التعبيرية التي يستخدمها التطبيق. إذا كان هذا المفتاح غير موجود، فهذا يعني أن التطبيق لا يستخدم EmojiCompat.
  • EDITOR_INFO_REPLACE_ALL_KEY: إذا كان المفتاح متوفرًا وتم ضبطه على true، سيضبط التطبيق EmojiCompat لاستبدال جميع الرموز التعبيرية، حتى إذا كانت متوفّرة في النظام.

مزيد من المعلومات حول كيفية تهيئة مثيل EmojiCompat

استخدام الرموز التعبيرية في طرق العرض المخصّصة

إذا كان لتطبيقك طرق عرض مخصّصة أي فئة فرعية مباشرة أو غير مباشرة من TextView—مثل Button، Switch أو EditText - ويمكن أن تعرض هذه الملفات الشخصية محتوى من إنشاء المستخدم للمحتوى، فيجب على كل منها تنفيذ EmojiCompat

وتختلف هذه العملية استنادًا إلى ما إذا كان تطبيقك يستخدم مكتبة "AppCompat".

إضافة طرق عرض مخصّصة للتطبيقات باستخدام AppCompat

إذا كان تطبيقك يستخدم "AppCompat"، يمكنك تمديد تنفيذ "AppCompat" بدلاً من على التنفيذ الأساسي في النظام الأساسي. استخدِم الجدول التالي كدليل لكيفية توسيع نطاق المشاهدات في AppCompat:

بدلاً من تمديد... تمديد
TextView AppCompatTextView
EditText AppCompatEditText
ToggleButton AppCompatToggleButton
Switch SwitchCompat
Button AppCompatButton
CheckedTextView AppCompatCheckedTextView
RadioButton AppCompatRadioButton
CheckBox AppCompatCheckBox
AutoCompleteTextView AppCompatAutoCompleteTextView
MultiAutoCompleteTextView AppCompatMultiAutoCompleteTextView

إضافة طرق عرض مخصّصة للتطبيقات التي لا تتوفّر لها منصّة AppCompat

إذا كان تطبيقك لا يستخدم AppCompat، يمكنك استخدام أدوات مساعدة دمج العرض في وحدة emoji2-views-helper المصممة للاستخدام في طرق العرض المخصصة. هذه هي الأدوات المساعدة التي تستخدمها مكتبة AppCompat لإتاحة الرموز التعبيرية.

أكمِل الخطوات التالية لإتاحة طرق العرض المخصّصة للتطبيقات التي لا تستخدمها. AppCompat

  1. إضافة مكتبة emoji2-views-helper:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. اتّبِع التعليمات لتضمين EmojiTextViewHelper أو EmojiEditTextHelper في طرق العرض المخصّصة لتطبيقك

  3. اختبار عملية الدمج من خلال إطلاق تطبيقك على جهاز يعمل بنظام التشغيل Android 10 أو أقل وعرض سلسلة الاختبار التالية. تأكد من أن جميع الأحرف العرض بشكل صحيح.

    • 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
    • 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲، 🥷🏿، 🐻 ويتميز
    • 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
    • 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩

ميزات اختيارية للتعامل مع الرموز التعبيرية 2

بعد تضمين مكتبة emoji2 في تطبيقك، يمكنك إضافة العنصر الاختياري. الميزات الموضحة في هذا القسم.

إعداد رمز تعبيري 2 لاستخدام خط مختلف أو موفّر خطوط قابل للتنزيل

لإعداد emoji2 من أجل استخدام خط مختلف أو موفِّر خط قابل للتنزيل، اتّبِع الخطوات التالية: ما يلي:

  1. إيقاف EmojiCompatInitializer من خلال إضافة ما يلي إلى ملف البيان:

    <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
               tools:node="remove" />
    </provider>
  2. نفّذ أيًا مما يلي:

    • يمكنك استخدام الإعدادات التلقائية من خلال استدعاء DefaultEmojiCompatConfiguration.create(context)

    • يمكنك إنشاء الإعدادات الخاصة بك لتحميل الخطوط من مصدر آخر باستخدام. EmojiCompat.Config يوفّر هذا الصف عدة خيارات لتعديل EmojiCompat. المستخدم، كما هو موضح في القسم التالي.

تعديل سلوك EmojiCompat

يمكنك استخدام مثيل من EmojiCompat.Config لتعديل EmojiCompat. السلوك.

يعد خيار التهيئة الأكثر أهمية setMetadataLoadStrategy()، التي تتحكم في وقت تحميل EmojiCompat للخط. سيبدأ تحميل الخط بمجرد يتم استدعاء EmojiCompat.load()، ويؤدي ذلك إلى تشغيل أي عمليات تنزيل ضرورية. تشير رسالة الأشكال البيانية ينشئ نظام التشغيل سلسلة محادثات لتنزيل الخطوط ما لم يوفّر تطبيقك سلسلة محادثات.

يتيح لك LOAD_STRATEGY_MANUAL التحكّم في وقت استدعاء الدالة EmojiCompat.load()، LOAD_STRATEGY_DEFAULT إلى بدء التحميل بشكل متزامن في المكالمة EmojiCompat.init()

تستخدم معظم التطبيقات "LOAD_STRATEGY_MANUAL" لتتمكّن من التحكّم في سلسلة المحادثات والتوقيت تحميل الخط يجب تأجيل تطبيقك إلى ما بعد ظهور الشاشة الأولى تجنب إدخال وقت استجابة بدء التشغيل. يتابع EmojiCompatInitializer هذا. التطبيق وتأجيل تحميل خط الرموز التعبيرية حتى ما بعد استئناف الشاشة الأولى.

استخدم الطرق التالية من الفئة الأساسية لتعيين أوجه أخرى التكوين:

  • setReplaceAll(): يحدّد ما إذا كان EmojiCompat سيستبدل كل الرموز التعبيرية التي يعثر عليها بمثيلات من EmojiSpan. بشكل تلقائي، عندما يستنتج EmojiCompat أن النظام يمكنه لعرض رمز تعبيري، لا يحل محل ذلك الرمز التعبيري. عند الضبط على true، تستبدل EmojiCompat كل الرموز التعبيرية بكائنات EmojiSpan.
  • setEmojiSpanIndicatorEnabled(): يشير إلى ما إذا كان EmojiCompat سيستبدل رمزًا تعبيريًا برمز EmojiSpan الخاص بك. عند الضبط على true، يرسم EmojiCompat خلفية لـ EmojiSpan تُستخدم هذه الطريقة بشكل أساسي لأغراض تصحيح الأخطاء.
  • setEmojiSpanIndicatorColor: لضبط اللون للإشارة إلى EmojiSpan. القيمة الافتراضية هي GREEN
  • registerInitCallback(): تُعلِم هذه السياسة التطبيق بحالة إعداد EmojiCompat.

إضافة أدوات معالجة الأحداث للإعداد

يوفّر الصفان EmojiCompat وEmojiCompat.Config registerInitCallback() أو unregisterInitCallback() لتسجيل وإلغاء تسجيل استدعاءات الإعداد. يستخدم تطبيقك هذه طلبات معاودة الاتصال للانتظار حتى يتم إعداد EmojiCompat قبل معالجة الرموز التعبيرية على سلسلة محادثات في الخلفية أو بطريقة عرض مخصّصة

لاستخدام هذه الطرق، قم بإنشاء مثيل EmojiCompat.InitCallback الصف. استدعِ هذه الطرق ومرر في مثيل صف واحد (EmojiCompat.InitCallback). عندما يتم الإعداد بنجاح، يستدعي صف واحد (EmojiCompat) onInitialized() . إذا تعذّر إعداد المكتبة، تطلب الفئة EmojiCompat onFailed() .

للتحقق من حالة التهيئة في أي وقت، اطلب getLoadState() . تُرجع هذه الطريقة إحدى القيم التالية: LOAD_STATE_LOADING، LOAD_STATE_SUCCEEDED, أو LOAD_STATE_FAILED

التوافق مع الخطوط المضمَّنة في الرموز التعبيرية 2

يمكنك استخدام عنصر "emoji2-bundled" لتجميع خط للرموز التعبيرية في تطبيقك. ومع ذلك، ونظرًا لأن حجم الخط NotoColorEmoji يتجاوز 10 ميغا بايت، فإننا نشدّد على ننصح بأن يستخدم تطبيقك الخطوط القابلة للتنزيل إن أمكن. تشير رسالة الأشكال البيانية عناصر "emoji2-bundled" مخصّصة للتطبيقات على الأجهزة غير المتوافقة. خطوط قابلة للتنزيل.

لاستخدام عنصر "emoji2-bundled"، اتّبِع الخطوات التالية:

  1. تضمين emoji2-bundled وemoji2 عنصر:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. اضبط emoji2 لاستخدام الإعدادات المجمّعة:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
    
  3. اختبر الدمج باتباع الخطوات السابقة لتضمين emojicompat مع استخدام AppCompat أو بدونها. تأكد من أن سلسلة الاختبار بشكل صحيح.

    • 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
    • 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲، 🥷🏿، 🐻 ويتميز
    • 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
    • 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩

تأثير ضبط EmojiCompat التلقائي

يطبق النظام التهيئة الافتراضية باستخدام مكتبة بدء التشغيل، EmojiCompatInitializer، DefaultEmojiCompatConfig

بعد استئناف النشاط الأول في تطبيقك، يجدول أداة الإعداد الرموز التعبيرية. جارٍ تحميل الخط وتتيح هذه المهلة القصيرة لتطبيقك عرض المحتوى الأولي بدون أي وقت استجابة محتمل بسبب تحميل الخط في سلسلة محادثات في الخلفية.

يبحث DefaultEmojiCompatConfig عن خط قابل للتنزيل مثبَّته النظام. مقدِّم خدمة ينفِّذ واجهة EmojiCompat، مثل Google Play على الأجهزة المتوافقة مع "خدمات Google Play"، يؤدي هذا إلى تحميل الخط باستخدام خدمات Google Play

ينشئ أداة الإعداد سلسلة محادثات في الخلفية لتحميل خط الرموز التعبيرية والخط. يمكن أن يستغرق التنزيل مدة تصل إلى 10 ثوانٍ قبل انتهاء المهلة. بعد أن يصبح الخط يستغرق تنزيله 150 مللي ثانية تقريبًا على سلسلة محادثات في الخلفية إعداد EmojiCompat.

تأجيل إعداد EmojiCompat، حتى في حال إيقاف الميزة EmojiCompatInitializer إذا قمت بتهيئة EmojiCompat، يمكنك الاتصال بالرقم EmojiCompat.load() بعد عرضه. الشاشة الأولى من تطبيقك لتجنب التعارض في الخلفية مع تحميل الشاشة.

بعد التحميل، يستخدم EmojiCompat حوالي 300 كيلوبايت من ذاكرة الوصول العشوائي للاحتفاظ بالرمز التعبيري بيانات التعريف.