يتم تحديث المجموعة العادية من الرموز التعبيرية سنويًا من خلال Unicode نظرًا لتزايد استخدام الرموز التعبيرية بسرعة لجميع أنواع التطبيقات.
إذا كان تطبيقك يعرض محتوى على الإنترنت أو يوفر إدخال نص، ننصحك بشدة بتوفير أحدث خطوط الرموز التعبيرية. وإلا، قد يتم عرض الرموز التعبيرية اللاحقة على شكل مربّع مربّع صغير يُسمى tofu (☐) أو تسلسلات رموز تعبيرية أخرى يتم عرضها بشكل غير صحيح.
ولا يمكن للإصدارات 11 من Android (المستوى 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) يوفّر الدعم لأحدث إصدار من الرموز التعبيرية، بما في ذلك التوافق مع الأنظمة القديمة مع إصدارات Android القديمة وصولاً إلى واجهة برمجة التطبيقات 21. تتناول هذه الصفحة كيفية ضبط الرموز التعبيرية الحديثة في نظام العرض. راجِع صفحة الرموز التعبيرية في Compose للاطّلاع على مزيد من المعلومات.
المتطلّبات الأساسية
للتأكّد من أنّ تطبيقك يعرض الرموز التعبيرية الأحدث بشكل صحيح، عليك تشغيله على جهاز يعمل بالإصدار 10 من نظام التشغيل Android (المستوى 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: 🦩، 🦻🏿، Spreadsheet🏼 🤝 🌴
يعرض تطبيقك تلقائيًا الرموز التعبيرية المتوافقة مع الأنظمة القديمة على جميع الأجهزة
التي توفّر موفِّر خطوط قابل للتنزيل ومتوافق مع emoji2
، مثل الأجهزة
المستندة إلى خدمات Google Play.
إذا كان تطبيقك يستخدم AppCompat ولكنه يعرض التوفو (☐)
في بعض الحالات، قد يعرض تطبيقك التوفو بدلاً من الرموز التعبيرية المناسبة، حتى إذا أضفت مكتبة 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: 🦩، 🦻🏿، Spreadsheet🏼 🤝 🌴
استخدام 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
للوحات المفاتيح عرض الرموز التعبيرية المتوافقة مع التطبيق الذي يتم التفاعل معه. أدوات تحرير أسلوب الإدخال (IMEs) يمكنها استخدام الإجراء
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
.
إضافة مكتبة "
emoji2-views-helper
":implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
اتّبِع التعليمات لتضمين
EmojiTextViewHelper
أوEmojiEditTextHelper
في طرق العرض المخصّصة لتطبيقك.اختبِر عملية الدمج من خلال تشغيل تطبيقك على جهاز يعمل بنظام التشغيل Android 10 أو بإصدار أقدم مع عرض سلسلة الاختبار التالية. تأكد من عرض جميع الأحرف بشكل صحيح.
- 14.0: 🫠 و🫱🏼 🫲🏿 و🫰🏽
- 13.1: 🧠 🌫️ و🧔─ ♀️ و🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲، 🥷🏿، 🐻 تنسيق️
- 12.1: 🧑 🦰، 🧑🏿 🦯، مفيدة 🤝 🏼
- 12.0: 🦩، 🦻🏿، Spreadsheet🏼 🤝 🌴
الميزات الاختيارية للتعامل مع الرمز التعبيري 2
بعد تضمين مكتبة emoji2
في تطبيقك، يمكنك إضافة الميزات الاختيارية الموضّحة في هذا القسم.
ضبط الرموز التعبيرية 2 لاستخدام خط مختلف أو موفّر خطوط قابل للتنزيل
لإعداد 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
للتحكّم في سلسلة التعليمات
وتوقيت تحميل الخط. يجب على التطبيق تأجيل النظر إلى ما بعد ظهور الشاشة الأولى
لتجنب تقديم وقت استجابة بدء التشغيل. يتّبع EmojiCompatInitializer
هذه الممارسة ويؤجِّل تحميل خط الرموز التعبيرية إلى أن يتم استئناف تشغيل الشاشة الأولى.
استخدِم الطرق التالية من الفئة الأساسية لتحديد جوانب أخرى من عملية الضبط:
setReplaceAll()
: يحدد ما إذا كانEmojiCompat
سيستبدل جميع الرموز التعبيرية التي يعثر عليها بمثيلاتEmojiSpan
. بشكل تلقائي، عندما يستنتجEmojiCompat
أنّ النظام يمكنه عرض رمز تعبيري، لا يستبدل ذلك الرمز التعبيري. عند ضبط السياسة علىtrue
، يتم استبدال كل الرموز التعبيرية بكائناتEmojiSpan
.EmojiCompat
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
، عليك اتّباع الخطوات التالية:
تضمين
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: 🦩، 🦻🏿، Spreadsheet🏼 🤝 🌴
تأثير إعدادات EmojiCompat التلقائية
يطبّق النظام الإعدادات التلقائية باستخدام مكتبة بدء التشغيل وEmojiCompatInitializer
وDefaultEmojiCompatConfig
.
بعد استئناف النشاط الأول في التطبيق، يحدد المُعِدّ موعدًا لتحميل خط الرموز التعبيرية. وتتيح هذه المهلة الموجزة لتطبيقك عرض المحتوى الأولي بدون أي وقت استجابة محتمل بسبب تحميل الخط في سلسلة محادثات في الخلفية.
يبحث DefaultEmojiCompatConfig
عن موفِّر خطوط قابل للتنزيل يثبّته النظام وينفّذ واجهة EmojiCompat
، مثل خدمات Google Play. في الأجهزة التي تعمل بواسطة "خدمات Google Play"، يؤدي هذا إلى تحميل الخط باستخدام
"خدمات Google Play".
ينشئ المهيئ سلسلة محادثات في الخلفية لتحميل خط الرموز التعبيرية، وقد يستغرق تنزيل الخط مدة تصل إلى 10 ثوانٍ قبل انتهاء المهلة. بعد تنزيل الخط، يستغرق الأمر 150 مللي ثانية تقريبًا في سلسلة التعليمات في الخلفية لإعداد EmojiCompat
.
يمكنك تأجيل إعداد EmojiCompat
، حتى إذا أوقفت
EmojiCompatInitializer
. في حال ضبط EmojiCompat
يدويًا، يمكنك الاتصال بـ EmojiCompat.load()
بعد أن يتم عرض الشاشة الأولى من تطبيقك لتجنُّب تزايد الطلب في الخلفية مع تحميل الشاشة الأولى.
بعد التحميل، يستخدم EmojiCompat
حوالي 300 كيلوبايت من ذاكرة الوصول العشوائي للاحتفاظ بالبيانات الوصفية للرموز التعبيرية.