يتم تعديل المجموعة العادية من رموز الإيموجي سنويًا من قِبل يونيكود، لأنّ استخدام رموز الإيموجي يزداد بسرعة في جميع أنواع التطبيقات.
إذا كان تطبيقك يعرض محتوى على الإنترنت أو يوفّر إدخالًا نصيًا، ننصحك بشدة بإتاحة استخدام أحدث خطوط الرموز التعبيرية. بخلاف ذلك، قد يتم عرض الرموز التعبيرية اللاحقة على شكل مربّع صغير يُعرف باسم 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
ولا تتطلب أي إعدادات إضافية للعمل.
إتاحة رموز الإيموجي في ميزة "الإنشاء"
توفّر مجموعة بيانات المنتجات (BOM) لشهر آذار (مارس) 2023 (واجهة مستخدم Compose 1.4) أحدث إصدار من الرموز التعبيرية، بما في ذلك التوافق مع الإصدارات القديمة من Android حتى IDE 21. تتناول هذه الصفحة كيفية ضبط رموز الإيموجي الحديثة في نظام View. يمكنك الاطّلاع على صفحة الرموز التعبيرية في "إنشاء" للتعرّف على مزيد من المعلومات.
المتطلّبات الأساسية
للتأكّد من أنّ تطبيقك يعرض الرموز التعبيرية الجديدة بشكل صحيح، يمكنك تشغيله على جهاز يعمل بالإصدار Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو إصدار أقل. تتضمّن هذه الصفحة رموزًا تعبيرية حديثة يمكنك عرضها للاختبار.
استخدام AppCompat لتوفير أحدث رموز الإيموجي
AppCompat
يتضمّن الإصدار 1.4 ميزة استخدام الرموز التعبيرية.
لاستخدام AppCompat
لتفعيل الرموز التعبيرية، اتّبِع الخطوات التالية:
تأكَّد من أنّ الوحدة تعتمد على إصدار مكتبة
AppCompat
1.4.0-alpha01 أو إصدار أحدث.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
تأكَّد من أنّ جميع الأنشطة التي تعرض نصًا توسّع فئة
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
يمكنك اختبار عملية الدمج من خلال تشغيل تطبيقك على جهاز يعمل بنظام التشغيل Android 10 أو إصدار أقدم وعرض سلسلة الاختبار التالية. تأكَّد من أنّ جميع الأحرف معروضة بشكل صحيح.
- الإصدار 14.0: 🫠 و🫱🏼🫲🏿 و🫰🏽
- 13.1: 🧧️ 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
- الإصدار 13.0: 🥲 و🥷🏿 و🐻❄️
- 12.1: 🧑🏻🦰 و🧑🏿🦯 و👩🏻🤝👩🏼
- 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩
يعرض تطبيقك تلقائيًا الرموز التعبيرية المتوافقة مع الإصدارات القديمة على جميع الأجهزة التي
توفّر فيها خدمة مزوّد خطوط قابل للتنزيل ومتوافق مع emoji2
، مثل الأجهزة التي
تعمل بنظام خدمات Google Play.
إذا كان تطبيقك يستخدم AppCompat ولكنه يعرض رمز tofu (☐)
في بعض الحالات، قد يعرض تطبيقك رمزًا تعبيريًا لفول الصويا بدلاً من الرمز التعبيري المناسب، حتى إذا
أضفت مكتبة AppCompat
. في ما يلي التفسيرات والحلول المحتملة.
تشغيل التطبيق على جهاز تم تثبيت نظام التشغيل عليه مؤخرًا أو على محاكي جديد
يمكنك محو بيانات "خدمات Google Play" الخاصة بالتطبيق لمحو أي تخزين مؤقت للخط قد يحدث أثناء بدء التشغيل. يؤدي ذلك عادةً إلى حلّ المشكلة بعد بضع ساعات.
لمحو بيانات التطبيق، اتّبِع الخطوات التالية:
افتح الإعدادات على جهاز Android.
انقر على التطبيقات والإشعارات.
انقر على عرض كل التطبيقات أو معلومات التطبيق.
انتقِل بين التطبيقات وانقر على خدمات Google Play.
انقر على مساحة التخزين وذاكرة التخزين المؤقت.
انقر على محو ذاكرة التخزين المؤقت.
لا يستخدم تطبيقك فئة مرتبطة بالنص في مكتبة AppCompat.
ويمكن أن يحدث ذلك إذا لم تُوسِّع AppCompatActivity
أو إذا أنشأت مثيلًا لمحاولة
عرض في الرمز البرمجي، مثل TextView
. تحقَّق مما يلي:
- تم تمديد النشاط لمدة
AppCompatActivity
. - في حال إنشاء طريقة العرض في الرمز البرمجي، استخدِم
AppCompat
الفئة الفرعية الصحيحة.
يملأ AppCompatActivity
AppCompatTextView
تلقائيًا بدلاً من
TextView
عند توسيع ملف XML، لذا لا تحتاج إلى تعديل ملف XML.
لا يتيح الهاتف الاختباري استخدام الخطوط القابلة للتنزيل.
تأكَّد من أنّ DefaultEmojiCompatConfig.create
يعرض إعدادات غير فارغة.
محاكي يعمل بمستوى واجهة برمجة تطبيقات أقدم لم يُحدِّث "خدمات Google Play"
عند استخدام محاكي على مستوى واجهة برمجة تطبيقات أقدم، قد تحتاج إلى تحديث
حِزمة "خدمات Google Play" المُدمَجة لنظام التشغيل emoji2
للعثور على مقدّم الخطوط. لإجراء ذلك،
سجِّل الدخول إلى "متجر Google Play" على المحاكي.
للتأكّد من تثبيت إصدار متوافق، اتّبِع الخطوات التالية:
نفِّذ الأمر التالي:
adb shell dumpsys package com.google.android.gms | grep version
تأكَّد من أنّ
versionCode
أعلى من211200000
.
إتاحة رموز الإيموجي بدون حزمة AppCompat
إذا لم يكن بإمكان تطبيقك تضمين AppCompat
، يمكنه استخدام emoji2
مباشرةً. يتطلب هذا الإجراء
مزيدًا من العمل، لذا لا تستخدِم هذه الطريقة إلا إذا تعذّر على تطبيقك استخدام AppCompat
.
لتفعيل الرموز التعبيرية بدون مكتبة AppCompat
، اتّبِع الخطوات التالية:
في ملف
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
بالفعل.في تنسيق XML والرمز البرمجي، أينما كنت تستخدم
TextView
أوEditText
أوButton
، يمكنك استخدامEmojiTextView
أوEmojiEditText
أوEmojiButton
بدلاً من ذلك.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
من خلال تضمين وحدة
emoji2
، يستخدم النظام موفِّر ملفّات الخطوط التلقائية القابلة للتنزيل لتحميل خط الرموز التعبيرية تلقائيًا بعد بدء تشغيل التطبيق بفترة قصيرة. ليس هناك حاجة إلى إجراء مزيد من الإعدادات.لاختبار عملية الدمج، افتح تطبيقك على جهاز يعمل بنظام التشغيل 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
قادرًا على عرض رمز emojy. تأخذ هذه الطريقة 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
.
إضافة مكتبة
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
اتّبِع التعليمات لتضمين رمز
EmojiTextViewHelper
أوEmojiEditTextHelper
في طرق العرض المخصّصة لتطبيقك.يمكنك اختبار عملية الدمج من خلال تشغيل تطبيقك على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أقدم وعرض سلسلة الاختبار التالية. تأكَّد من أنّ جميع الأحرف معروضة بشكل صحيح.
- الإصدار 14.0: 🫠 و🫱🏼🫲🏿 و🫰🏽
- 13.1: 🧧️ 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
- الإصدار 13.0: 🥲 و🥷🏿 و🐻❄️
- 12.1: 🧑🏻🦰 و🧑🏿🦯 و👩🏻🤝👩🏼
- 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩
ميزات اختيارية لمعالجة emoji2
بعد تضمين مكتبة emoji2
في تطبيقك، يمكنك إضافة ميزات
اختيارية موضّحة في هذا القسم.
ضبط emoji2 لاستخدام خط مختلف أو موفِّر خط قابل للتنزيل
لضبط emoji2
لاستخدام خط مختلف أو مقدّم خطوط قابل للتنزيل، اتّبِع الخطوات التالية:
أوقِف العلامة
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>
نفّذ أيًا مما يلي:
استخدِم الإعدادات التلقائية من خلال الاتصال بـ
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
حتى تتمكّن من التحكّم في سلسلة المحادثات وتوقيت loadingتحميل الخط. يجب أن يؤجل تطبيقك تحميل البيانات إلى ما بعد ظهور الشاشة الأولى لتجنُّب حدوث وقت استجابة في بدء التشغيل. يتّبع تطبيق EmojiCompatInitializer
هذه
الممارسة ويؤجل تحميل خط الرموز التعبيرية إلى ما بعد استئناف الشاشة الأولى.
استخدِم الطرق التالية من الفئة الأساسية لضبط جوانب أخرى من الإعداد:
setReplaceAll()
: يحدد ما إذا كانEmojiCompat
سيستبدل كل الرموز التعبيرية التي يعثر عليها بمثيلاتEmojiSpan
. عندما يستنتجEmojiCompat
تلقائيًا أنّ النظام يمكنه عرض رمز تعبيري، لا يحل محل ذلك الرمز التعبيري. عند ضبط القيمة علىtrue
،EmojiCompat
يستبدل كل رموز الإيموجي بعناصرEmojiSpan
.setEmojiSpanIndicatorEnabled()
: تشير إلى ما إذا كانEmojiCompat
يستبدل رمزًا تعبيريًا بكائنEmojiSpan
. عند ضبطها علىtrue
، ترسمEmojiCompat
خلفية لملفEmojiSpan
. تُستخدم هذه الطريقة بشكل أساسي لأغراض تصحيح الأخطاء.setEmojiSpanIndicatorColor
: لضبط اللون للإشارة إلىEmojiSpan
القيمة التلقائية هيGREEN
.-
registerInitCallback()
: يُعلم التطبيق بحالة بدء تشغيلEmojiCompat
.
إضافة أدوات معالجة الأحداث للإعداد
توفِّر فئتَا EmojiCompat
وEmojiCompat.Config
الطريقتَين
registerInitCallback()
و
unregisterInitCallback()
لتسجيل وإزالة تسجيل وظائف الاستدعاء المخصّصة لعمليات الإعداد. يستخدم تطبيقك هذه callbacks للانتظار إلى أن يتمّ إعداد EmojiCompat
قبل معالجة الرموز التعبيرية في سلسلتَي مهام في الخلفية أو في عرض مخصّص.
لاستخدام هذه الطرق، يمكنك إنشاء مثيل للفئة EmojiCompat.InitCallback
. استخدِم هاتين الطريقتَين وأدخِل مثيل فئة
EmojiCompat.InitCallback
. عندما تكون عملية الإعداد ناجحة، تستدعي
الفئة EmojiCompat
الطريقة
onInitialized()
. إذا تعذّر إعداد المكتبة، تستدعي فئة EmojiCompat
الطريقة
onFailed()
.
للتحقّق من حالة الإعداد في أي وقت، يمكنك استدعاء الأسلوب
getLoadState()
. تعرض هذه الطريقة إحدى القيم التالية:
LOAD_STATE_LOADING
أو
LOAD_STATE_SUCCEEDED
أو
LOAD_STATE_FAILED
.
إتاحة الخطوط المجمّعة مع emoji2
يمكنك استخدام العنصر emoji2-bundled
لتجميع خط رموز تعبيرية في تطبيقك.
ولكن بما أنّ خط NotoColorEmoji
يزيد حجمه عن 10 ميغابايت، ننصح بشدة
باستخدام تطبيقك لخطوط قابلة للتنزيل كلما أمكن ذلك. إنّ عناصر
emoji2-bundled
مخصّصة للتطبيقات على الأجهزة التي لا تتيح
الخطوط القابلة للتنزيل.
لاستخدام العنصر emoji2-bundled
، اتّبِع الخطوات التالية:
تضمين عنصرَي
emoji2-bundled
وemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
اضبط
emoji2
لاستخدام الإعدادات المجمّعة:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
اختبِر عملية الدمج باتّباع الخطوات السابقة لتضمين
emojicompat
مع السمةAppCompat
أو بدونها. تأكَّد من أنّ سلسلة الاختبار تظهر بشكل صحيح.- 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
- 13.1: 🧧️ 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
- الإصدار 13.0: 🥲 و🥷🏿 و🐻❄️
- 12.1: 🧑🏻🦰 و🧑🏿🦯 و👩🏻🤝👩🏼
- 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩
تأثير الإعداد التلقائي لـ EmojiCompat
يطبّق النظام الإعدادات التلقائية باستخدام مكتبة بدء التشغيل،
EmojiCompatInitializer
، و
DefaultEmojiCompatConfig
.
بعد استئناف النشاط الأول في تطبيقك، يحدّد المُنشئ جدولاً زمنيًا لتحميل ملف رموزال emojy الخط. يتيح هذا التأخير القصير لتطبيقك عرض محتواه الأوّلي بدون أي وقت استجابة محتمل بسبب تحميل الخط في سلسلة مهام في الخلفية.
يبحث DefaultEmojiCompatConfig
عن موفِّر خطوط قابل للتنزيل ومُثبَّت على النظام لتنفيذ واجهة EmojiCompat
، مثل خدمات Google Play
. على الأجهزة التي تعمل بـ "خدمات Google Play"، يؤدي ذلك إلى تحميل الخط باستخدام
"خدمات Google Play".
ينشئ برنامج الإعداد سلسلة محادثات في الخلفية لتحميل خط الرموز التعبيرية،
ويمكن أن يستغرق تنزيل الخط مدة تصل إلى 10 ثوانٍ قبل انتهاء المهلة. بعد
تنزيل الخط، يستغرق EmojiCompat
تهيئة 150 ملي ثانية تقريبًا في سلسلة مهام في الخلفية.
يمكنك تأجيل إعداد EmojiCompat
حتى في حال إيقاف
EmojiCompatInitializer
. في حال ضبط EmojiCompat
يدويًا، يمكنك استدعاء EmojiCompat.load()
بعد عرض EmojiCompat.load()
الشاشة الأولى من تطبيقك لتجنُّب التعارض في الخلفية مع عملية تحميل EmojiCompat.load()
الشاشة الأولى.
بعد التحميل، يستخدم EmojiCompat
حوالي 300 كيلوبايت من ذاكرة الوصول العشوائي (RAM) لتخزين metadata
الرموز التعبيرية.