تهدف مكتبة دعم EmojiCompat
إلى
إبقاء أجهزة Android محدّثة باستخدام أحدث الرموز التعبيرية. ويمنع هذا الإعداد تطبيقك
من عرض أحرف الرموز التعبيرية غير المتوفّرة على شكل ☐، ما يشير إلى أنّ جهازك لا يتضمّن خطًا لعرض النص. من خلال
استخدام مكتبة EmojiCompat
،
لن يحتاج مستخدمو تطبيقك إلى انتظار تحديثات نظام التشغيل Android للحصول على أحدث
رموز تعبيرية.
يُرجى الرجوع إلى المراجع ذات الصلة التالية:
كيف يعمل EmojiCompat؟
توفّر مكتبة دعم EmojiCompat
فئات لتنفيذ ميزة الرموز التعبيرية المتوافقة مع الإصدارات القديمة على الأجهزة التي تعمل
بالإصدار 4.4 من نظام التشغيل Android (المستوى 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
مكتبة الدعم أو التطبيقات المصغّرة الخاصة بها في تطبيقاتك المتوافقة مع الأجهزة التي تعمل
بنظام التشغيل Android 4.4 (المستوى 19 لواجهة برمجة التطبيقات) أو إصدارات أقدم. ومع ذلك، إذا كان الجهاز يعمل
بإصدار Android أقدم من المستوى 19 من واجهة برمجة التطبيقات،
EmojiCompat
تكون التطبيقات المصغّرة فيه في حالة
"بدون عملية". وهذا يعني أنّ
EmojiTextView
يتصرّف تمامًا
مثل TextView
العادي.
مثيل EmojiCompat
، يصبح على الفور
في حالة
LOAD_STATE_SUCCEEDED
عند استدعاء الطريقة
init()
.
مصادر إضافية
للحصول على معلومات إضافية عن استخدام مكتبة
EmojiCompat
، يمكنك مشاهدة EmojiCompat.