تهدف مكتبة دعم EmojiCompat
إلى
إبقاء أجهزة Android مُحدّثة بأحدث الرموز التعبيرية. ويمنع هذا الرمز تطبيقك
من عرض رموز الإيموجي الناقصة على شكل ☐، ما يشير إلى أنّ جهازك لا يتضمّن خطًا لعرض النص. عند
استخدام مكتبة دعم EmojiCompat
،
لن يحتاج مستخدمو تطبيقك إلى انتظار تحديثات نظام التشغيل Android للحصول على أحدث
الرموز التعبيرية.
يمكنك الاطّلاع على المراجع التالية ذات الصلة:
ما هي آلية عمل EmojiCompat؟
توفّر مكتبة دعم EmojiCompat
فئات لإتاحة الرموز التعبيرية المتوافقة مع الإصدارات القديمة على الأجهزة التي تعمل
بنظام التشغيل Android 4.4 (المستوى 19 من واجهة برمجة التطبيقات) والإصدارات الأحدث. يمكنك ضبط
EmojiCompat
باستخدام خطوط مضمَّنة أو
قابلة للتنزيل. لمزيد من المعلومات عن الإعداد، يمكنك الاطّلاع على
الأقسام التالية:
يتعرَّف EmojiCompat
على الرموز التعبيرية لـ CharSequence
محدّد، ويستبدلها بـ EmojiSpans
إذا لزم الأمر، ويعرض أخيرًا الرموز التعبيرية. يوضح الشكل 2 العملية.
إعدادات الخطوط القابلة للتنزيل
تستخدم إعدادات الخطوط القابلة للتنزيل ميزة مكتبة دعم "الخطوط القابلة للتنزيل"
لتنزيل خط الرموز التعبيرية. يعدّل أيضًا
البيانات الوصفية الضرورية للرموز التعبيرية التي تحتاجها مكتبة دعم EmojiCompat
لمواكبة أحدث إصدارات مواصفات يونيكود.
إضافة تبعية مكتبة الدعم
لاستخدام مكتبة دعم 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 التعبيرية. يتم تعديل الخط على النحو التالي:- لإتاحة التوافق مع الأنظمة القديمة لعرض الرموز التعبيرية، يتم تمثيل جميع أحرف الرموز التعبيرية بنقطة رمز يونيكود واحدة في منطقة الاستخدام الخاص التكميلية الإضافية في يونيكود التي تبدأ بالرمز U+F0001.
-
يتم إدراج البيانات الوصفية الإضافية للرموز التعبيرية بتنسيق ثنائي في الخط
ويتم تحليلها في وقت التشغيل من خلال
EmojiCompat
. يتم تضمين البيانات في جدولmeta
الخاص بالخط، مع العلامة الخاصة Emji.
خيارات الإعداد
يمكنك استخدام المثيل EmojiCompat
لتعديل سلوك EmojiCompat
. يمكنك استخدام
الطرق التالية من الفئة الأساسية لضبط الإعدادات:
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
مع إعدادات الخطوط المجمّعة، يجب تعديل اعتماديات مسار الفئة
لمشروع تطبيقك ضمن بيئة التطوير.
لإضافة مكتبة دعم إلى مشروع تطبيقك، اتّبِع الخطوات التالية:
- افتح ملف
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 مع أدوات IME
باستخدام مكتبة دعم EmojiCompat
، يمكن للوحات المفاتيح عرض الرموز التعبيرية المتوافقة مع التطبيق الذي تتفاعل معه. يمكن أن تستخدم أدوات IME الطريقة hasEmojiGlyph()
للتحقق مما إذا كان EmojiCompat
قادرًا على عرض رمز تعبيري. تستخدم هذه الطريقة CharSequence
من الرمز التعبيري وتعرض true
إذا كان بإمكان EmojiCompat
رصد الرمز التعبيري وعرضه.
ويمكن أيضًا أن تتحقق لوحة المفاتيح من إصدار مكتبة EmojiCompat
المتوافقة مع التطبيق لتحديد الرموز التعبيرية التي سيتم عرضها في لوحة الألوان. للتحقّق من الإصدار، إن توفّر، يجب أن تتحقّق لوحة المفاتيح مما إذا كانت المفاتيح التالية
متوفّرة في حزمة
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.