تهدف مكتبة دعم EmojiCompat
إلى
إبقاء أجهزة Android مُحدّثة بأحدث الرموز التعبيرية. ويمنع هذا الرمز تطبيقك
من عرض رموز الإيموجي الناقصة على شكل ☐، ما يشير إلى عدم توفّر خط على جهازك لعرض النص. عند
استخدام مكتبة دعم EmojiCompat
،
لن يحتاج مستخدمو التطبيق إلى انتظار تحديثات نظام التشغيل Android للحصول على أحدث
الرموز التعبيرية.
يمكنك الاطّلاع على المراجع التالية ذات الصلة:
كيف يعمل EmojiCompat؟
توفّر مكتبة دعم EmojiCompat
صفوفًا لإتاحة الرموز التعبيرية المتوافقة مع الإصدارات القديمة على الأجهزة التي تعمل
بنظام التشغيل Android 4.4 (المستوى 19 من واجهة برمجة التطبيقات) والإصدارات الأحدث. يمكنك ضبط
EmojiCompat
باستخدام خطوط مضمَّنة أو
قابلة للتنزيل. لمزيد من المعلومات عن الإعداد، يمكنك الاطّلاع على
الأقسام التالية:
يتعرَّف EmojiCompat
على الرموز التعبيرية لـ CharSequence
محدّد، ويستبدلها بـ EmojiSpans
إذا لزم الأمر، ويعرض أخيرًا الرموز التعبيرية. يوضّح الشكل 2 هذه العملية.
إعدادات الخطوط القابلة للتنزيل
تستخدم إعدادات الخطوط القابلة للتنزيل ميزة مكتبة دعم الخطوط القابلة للتنزيل لتنزيل خط رموز تعبيرية. ويُعدّل أيضًا
بيانات الإيموجي الوصفية اللازمة التي تحتاجها مكتبة الدعم EmojiCompat
لمواكبة أحدث إصدارات مواصفات
Unicode.
إضافة مكتبة دعم
لاستخدام مكتبة دعم EmojiCompat
،
عليك تعديل تبعيات مسار الطباعة لمشروع تطبيقك ضمن
بيئة التطوير.
لإضافة مكتبة دعم إلى مشروع تطبيقك، اتّبِع الخطوات التالية:
- افتح ملف
build.gradle
لتطبيقك. - أضِف مكتبة الدعم إلى القسم
dependencies
.
رائع
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
بدء إعداد الخط قابل للتنزيل
عليك إعداد EmojiCompat
لتحميل
البيانات الوصفية ونوع الخط. بما أنّ عملية الإعداد قد تستغرق بعض الوقت، تتم تنفيذها في سلسلة مهام في الخلفية.
لإعداد EmojiCompat
باستخدام
إعدادات الخط القابل للتنزيل، اتّبِع الخطوات التالية:
- يمكنك إنشاء مثيل للفئة
FontRequest
وتقديم مرجع موفّر الخط وحزمة موفِّر الخط وطلب البحث الخاص بالخط وقائمة علامات التجزئة الخاصة بالشهادة. لمزيد من المعلومات عنFontRequest
، يُرجى الرجوع إلى القسم استخدام الخطوط القابلة للتنزيل آليًا في مستندات الخطوط القابلة للتنزيل. - يمكنك إنشاء مثيل للدالة
FontRequestEmojiCompatConfig
وتقديم نسخة افتراضية منContext
وFontRequest
. - يمكنك إعداد
EmojiCompat
من خلال استدعاء الأسلوبinit()
وتمرير مثيلFontRequestEmojiCompatConfig
. - استخدِم التطبيقات المصغّرة
EmojiCompat
في ملفات XML الخاصة بالتصميم إذا كنت تستخدمAppCompat
، يُرجى الرجوع إلى القسم استخدام التطبيقات المصغّرة EmojiCompat مع AppCompat.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
لمزيد من المعلومات حول كيفية ضبط
EmojiCompat
باستخدام إعدادات الخط قابل للتنزيل
، انتقِل إلى نموذج تطبيق التوافق مع الرموز التعبيرية
Java
| Kotlin.
مكونات المكتبة
- التطبيقات المصغّرة:
EmojiEditText
وEmojiTextView
وEmojiButton
- عمليات تنفيذ الأدوات التلقائية لاستخدام
EmojiCompat
معTextView
وEditText
وButton
. EmojiCompat
- المساحة الرئيسية العلنية لـ "مكتبة الدعم" ويعمل هذا الجزء على تنفيذ كل المكالمات الخارجية والتنسيق مع الأجزاء الأخرى من النظام.
EmojiCompat.Config
- تُستخدَم لضبط مثيل العنصر الفردي الذي سيتم إنشاؤه.
EmojiSpan
- فئة فرعية
ReplacementSpan
تستبدل الحرف (التسلسلات) وتعرض الرمز. - الخط "
EmojiCompat
"
يستخدم EmojiCompat
خطًا لعرض رموز تعبيرية. هذا الخط هو نسخة معدَّلة من خط رموز Android التعبيرية. يتم تعديل الخط على النحو التالي:- لتوفير توافق مع الإصدارات القديمة لعرض الرموز التعبيرية، يتم تمثيل جميع رموزها باستخدام نقطة ترميز يونيكود واحدة في "منطقة الاستخدام الخاص الإضافي" (A) في يونيكود، بدءًا من U+F0001.
-
يتم إدراج بيانات وصفية إضافية للرموز التعبيرية بتنسيق ثنائي في الخط ويتم
تحليلها أثناء التشغيل بواسطة
EmojiCompat
. يتم تضمين البيانات في جدولmeta
للخط، باستخدام العلامة الخاصة Emji.
خيارات الضبط
يمكنك استخدام المثيل EmojiCompat
لتعديل سلوك EmojiCompat
. يمكنك استخدام methods التالية من الفئة الأساسية لضبط الإعدادات:
-
setReplaceAll()
: لتحديد ما إذا كان يجب أن يحلEmojiCompat
محل كل الرموز التعبيرية التي يعثر عليها ويحل محلهاEmojiSpans
وحسب الإعدادات التلقائية، يبذلEmojiCompat
قصارى جهده لمعرفة ما إذا كان النظام يمكنه عرض رموز تعبيرية ولا يحلّ محلّها. عند ضبط السياسة على القيمةtrue
، تستبدلEmojiCompat
كل الرموز التعبيرية التي يعثر عليها بـEmojiSpans
. setEmojiSpanIndicatorEnabled()
: يشير إلى ما إذا كانEmojiCompat
قد استبدل رمزًا تعبيريًا برمزEmojiSpan
. عند ضبطه علىtrue
، ترسمEmojiCompat
خلفية لEmojiSpan
. تُستخدَم هذه الطريقة بشكل أساسي لأغراض تصحيح الأخطاء.setEmojiSpanIndicatorColor()
: لضبط اللون للإشارة إلىEmojiSpan
. تكون القيمة التلقائيةGREEN
.-
registerInitCallback
: إبلاغ التطبيق بحالةEmojiCompat
بدء التشغيل
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
إضافة أدوات معالجة التهيئة
توفّر فئتَا EmojiCompat
و
EmojiCompat
طريقتَي
registerInitCallback()
و
unregisterInitCallback()
لتسجيل دالة استدعاء للإعداد. لاستخدام هذه الطرق، يمكنك إنشاء مثيل للفئة EmojiCompat.InitCallback
. استخدِم
هذه الطُرق وأرسِل مثيل فئة
EmojiCompat.InitCallback
. عند اكتمال
عملية إعداد مكتبة EmojiCompat
الداعمة، تستدعي فئة EmojiCompat
الطريقة
onInitialized()
. إذا تعذّر بدء مكتبة
، تستدعي فئة EmojiCompat
طريقة
onFailed()
.
للتحقّق من حالة الإعداد في أي وقت، يمكنك استدعاء طريقة getLoadState()
. وتعرض إحدى القيم التالية:
LOAD_STATE_LOADING
أو
LOAD_STATE_SUCCEEDED
أو LOAD_STATE_FAILED
.
استخدام EmojiCompat مع تطبيقات AppCompat المصغّرة
إذا كنت تستخدم AppCompat widgets
، يمكنك استخدام تطبيقات EmojiCompat
الممتدة من AppCompat widgets
.
- أضِف مكتبة الدعم إلى قسم الموارد التابعة.
رائع
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
رائع
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- استخدِم التطبيقات المصغّرة
EmojiCompat
AppCompat Widget
في ملفات XML الخاصة بتنسيق الصفحة.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
إعدادات الخطوط المجمَّعة
تتوفّر مكتبة دعم EmojiCompat
أيضًا
في إصدار مُجمَّع للخط. تتضمّن هذه الحزمة الخط مع البيانات الوصفية المضمّنة. تتضمّن الحزمة أيضًا
BundledEmojiCompatConfig
الذي يستخدم AssetManager
لتحميل البيانات الوصفية
والخطوط.
ملاحظة: يتم قياس حجم الخط بالميغابايت المتعدّدة.
إضافة تبعية مكتبة الدعم
لاستخدام EmojiCompat
مكتبة الدعم
مع إعدادات الخطوط المجمّعة، يجب تعديل ملف Classpath لمشروع تطبيقك
في بيئة التطوير.
لإضافة مكتبة دعم إلى مشروع تطبيقك:
- افتح ملف
build.gradle
لتطبيقك. - أضِف مكتبة الدعم إلى القسم
dependencies
.
رائع
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
استخدام خطوط مجمّعة لضبط إعدادات EmojiCompat
لاستخدام الخطوط المُضمّنة لضبط
EmojiCompat
، اتّبِع الخطوات التالية:
- استخدِم
BundledEmojiCompatConfig
لإنشاء مثيل منEmojiCompat
وتقديم مثيلContext
. - استخدِم الطريقة
init()
لبدءEmojiCompat
وضبط المثيلBundledEmojiCompatConfig
.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
استخدام EmojiCompat بدون التطبيقات المصغّرة
يستخدم EmojiCompat
EmojiSpan
لعرض الصور الصحيحة.
لذلك، يجب تحويل أي CharSequence
معيّن إلى
مثيلات Spanned
باستخدام
EmojiSpans
. توفّر فئة
EmojiCompat
طريقة ل
تحويل CharSequences
إلى
مثيلات Spanned
باستخدام
EmojiSpans
. باستخدام هذه الطريقة،
يمكنك معالجة النماذج التي تمت معالجتها وتخزينها مؤقتًا بدلاً من السلسلة الأولية،
ما يؤدي إلى تحسين أداء تطبيقك.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
استخدام EmojiCompat مع أنظمة الكتابة
باستخدام مكتبة دعم EmojiCompat
، يمكن للوحات المفاتيح عرض الرموز التعبيرية المتوافقة مع التطبيق الذي تتفاعل معه. يمكن أن تستخدم أنظمة IME الطريقة
hasEmojiGlyph()
للتحقّق مما إذا كان EmojiCompat
قادرًا
على عرض رمز تعبيري. تأخذ هذه الطريقة CharSequence
من
رمز تعبيري وتُعرِض true
إذا كان
EmojiCompat
يمكنه رصد رمز تعبيري
وعرضه.
يمكن للوحة المفاتيح أيضًا التحقّق من إصدار
EmojiCompat
مكتبة الدعم التي يتوافق معها التطبيق
لتحديد الرموز التعبيرية التي سيتم عرضها في لوحة الألوان. للتحقّق من
إصدار حزمة EditorInfo.extras
، إذا كان متوفّرًا، يجب أن تتحقّق لوحة المفاتيح مما إذا كانت مفاتيح
EditorInfo.extras
التالية متوفّرة في الحزمة:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
إذا كان المفتاح متوفّرًا في الحزمة، تمثّل القيمة
إصدار البيانات الوصفية للرموز التعبيرية التي يستخدمها التطبيق. إذا لم يكن
هذا المفتاح متوفّرًا، يعني ذلك أنّ التطبيق لا يستخدم EmojiCompat
.
إذا كان المفتاح متوفّرًا وتم ضبطه على true
، يشير ذلك إلى أنّه
استدعى التطبيق الأسلوب
SetReplaceAll()
. لمزيد من المعلومات عن
إعداد EmojiCompat
،
يُرجى الرجوع إلى قسم خيارات الإعداد.
بعد استلام المفاتيح في حِزمة
EditorInfo.extras
،
يمكن للوحة المفاتيح استخدام الأسلوب
hasEmojiGlyph()
حيث يكون metadataVersion
هو قيمة
EDITOR_INFO_METAVERSION_KEY
،
للتحقّق مما إذا كان بإمكان التطبيق عرض رمز تعبيري معيّن.
استخدام EmojiCompat مع التطبيقات المصغّرة المخصّصة
يمكنك في أي وقت استخدام process()
لمعالجة CharSequence
في تطبيقك مسبقًا وإضافته
إلى أي تطبيق مصغّر يمكنه عرض نُسخ Spanned
، على سبيل المثال، TextView
. بالإضافة إلى ذلك، يقدّم EmojiCompat
فئات مساعدة التطبيقات المصغّرة التالية للسماح لك بتحسين التطبيقات المصغّرة المخصّصة من خلال إتاحة رموز الإيموجي بأقل جهد ممكن.
- نموذج TextView
- نموذج EditText
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
الأسئلة الشائعة
- كيف يمكنني بدء تنزيل الخط؟
- ما هي المدة التي يستغرقها الإعداد؟
- ما مقدار الذاكرة التي تستخدمها مكتبة دعم EmojiCompat؟
- هل يمكنني استخدام EmojiCompat لعرض نص مخصّص في TextView؟
- ماذا يحدث إذا أضفت تطبيقات مصغّرة في ملفات XML الخاصة بتنسيقات التخطيط على الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 لواجهة برمجة التطبيقات) أو إصدار أقدم؟
ويتم تنزيل خطوط الرموز التعبيرية عند الطلب الأول، إذا لم تكن متوفّرة على الجهاز. تكون عملية جدولة التنزيل شفافة للتطبيق.
بعد تنزيل الخط، يستغرق بدء EmojiCompat
حوالي 150 ملي ثانية.
في الوقت الحالي، يتم تحميل بنية البيانات للعثور على الرمز التعبيري في ذاكرة التطبيق وتستهلك هذه البنية حوالي 200 كيلوبايت.
نعم. توفّر EmojiCompat فئات مساعدة للتطبيقات المصغّرة المخصّصة. من الممكن أيضًا
إجراء معالجة مسبقة لسلسلة معيّنة وتحويلها إلى
Spanned
. لمزيد من المعلومات حول فئات تطبيقات الأدوات المساعدة، ارجع إلى القسم استخدام EmojiCompat مع التطبيقات المصغّرة المخصّصة.
يمكنك تضمين مكتبة دعم EmojiCompat
أو التطبيقات المصغّرة الخاصة بها في تطبيقاتك التي تتوافق مع الأجهزة
التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم. ومع ذلك، إذا كان الجهاز يعمل
بإصدار Android أقدم من المستوى 19 من واجهة برمجة التطبيقات،
EmojiCompat
تكون التطبيقات المصغّرة فيه في حالة
"بدون عملية". وهذا يعني أنّ السمة EmojiTextView
تعمل تمامًا مثل TextView
العادية.
EmojiCompat
: يدخل فورًا في حالة LOAD_STATE_SUCCEEDED
عند استدعاء الطريقة init()
.
مصادر إضافية
للحصول على معلومات إضافية عن استخدام مكتبة
EmojiCompat
، يمكنك مشاهدة EmojiCompat.