تتم إعادة تحميل المجموعة العادية من الرموز التعبيرية سنويًا باستخدام يونيكود، لأنّ استخدام الرموز التعبيرية يتزايد بسرعة لجميع أنواع التطبيقات.
إذا كان تطبيقك يعرض محتوى على الإنترنت أو يوفّر إدخالًا نصيًا، ننصحك بشدة بإتاحة استخدام أحدث خطوط الرموز التعبيرية. وبخلاف ذلك، قد يتم عرض الرموز التعبيرية اللاحقة على شكل مربّع مربّع صغير باسم 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. تتناول هذه الصفحة كيفية ضبط الرموز التعبيرية الحديثة في نظام العرض. يمكنك الاطّلاع على صفحة الرموز التعبيرية في "إنشاء" للتعرّف على مزيد من المعلومات.
المتطلّبات الأساسية
للتأكّد من أنّ تطبيقك يعرض الرموز التعبيرية الأحدث بشكل صحيح، يجب تشغيله على جهاز يعمل بالإصدار 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 { ... }
يمكنك اختبار عملية الدمج من خلال تشغيل تطبيقك على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أقدم وعرض سلسلة الاختبار التالية. تأكَّد من عرض كل الأحرف بشكل صحيح.
- 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
- 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲، 🥷🏿، 🐻 ويتميز
- 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
- 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩
يعرض تطبيقك تلقائيًا الرموز التعبيرية المتوافقة مع الإصدارات القديمة على جميع الأجهزة التي توفّر موفِّر خطوط قابلاً للتنزيل ومتوافق مع 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
، يستخدم النظام موفّر الخطوط التلقائي القابل للتنزيل من أجل تحميل خط الرمز التعبيري تلقائيًا بعد بدء تشغيل التطبيق بفترة قصيرة. ولا يلزم إجراء أي إعدادات أخرى.لاختبار عملية الدمج، شغِّل تطبيقك على جهاز يعمل بالإصدار 11 من نظام التشغيل Android أو إصدار أقدم ويعرض سلاسل الاختبار التالية. تأكَّد من عرض كل الأحرف بشكل صحيح.
- 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
للوحات المفاتيح عرض الرموز التعبيرية المتوافقة مع التطبيق الذي تتفاعل معه. بإمكان محرِّري أساليب الإدخال استخدام الطريقة 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
في طرق العرض المخصّصة لتطبيقك.يمكنك اختبار عملية الدمج من خلال تشغيل تطبيقك على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أقدم وعرض سلسلة الاختبار التالية. تأكَّد من عرض كل الأحرف بشكل صحيح.
- 14.0: 🫠، 🫱🏼 🫲🏿، 🫰🏽
- 13.1: 📈 🌫️، 🧔 ♀️، 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲، 🥷🏿، 🐻 ويتميز
- 12.1: 🧑 🦰، 🧑🏿 🦯، 👩 🤝 👩🏼
- 12.0: 🦩، 🦻🏿، 👩🏼 🤝 👩
ميزات اختيارية للتعامل مع الرموز التعبيرية 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
، يستبدل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
"، اتّبِع الخطوات التالية:
تضمين
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
.
بعد استئناف النشاط الأول في تطبيقك، تجدول أداة الإعداد تحميل خط الرموز التعبيرية. وتتيح هذه المهلة القصيرة لتطبيقك عرض المحتوى الأولي بدون أي وقت استجابة محتمل بسبب تحميل الخط في سلسلة محادثات في الخلفية.
يبحث DefaultEmojiCompatConfig
عن موفِّر خطوط قابل للتنزيل مثبَّت من النظام ينفِّذ واجهة EmojiCompat
، مثل خدمات Google Play. في الأجهزة المتوافقة مع "خدمات Google Play"، يؤدي هذا الإجراء إلى تحميل الخط باستخدام
"خدمات Google Play".
ينشئ برنامج الإعداد سلسلة محادثات في الخلفية لتحميل خط الرموز التعبيرية،
ويمكن أن يستغرق تنزيل الخط مدة تصل إلى 10 ثوانٍ قبل انتهاء المهلة. بعد تنزيل الخط، يستغرق إعداد EmojiCompat
حوالي 150 مللي ثانية في سلسلة محادثات في الخلفية.
يمكنك تأجيل إعداد EmojiCompat
حتى في حال إيقاف
EmojiCompatInitializer
. في حال ضبط إعدادات
EmojiCompat
يدويًا، يمكنك طلب الرقم EmojiCompat.load()
بعد عرض
الشاشة الأولى من تطبيقك لتجنّب حدوث تعارض في الخلفية مع
أوّل تحميل للشاشة.
بعد التحميل، يستخدم EmojiCompat
حوالي 300 كيلوبايت من ذاكرة الوصول العشوائي للاحتفاظ بالبيانات الوصفية
للرموز التعبيرية.