توافق الرموز التعبيرية

تهدف مكتبة دعم EmojiCompat إلى ما يلي: إبقاء أجهزة Android مُحدّثة بأحدث الرموز التعبيرية. يمنع هذا الإجراء تطبيقك من عرض رموز الإيموجي المفقودة على شكل ☐، يشير إلى أنّ جهازك لا يتضمّن خطًا لعرض النص. من باستخدام مكتبة دعم EmojiCompat، لا يحتاج مستخدمو تطبيقك إلى انتظار تحديثات نظام التشغيل Android للحصول على آخر رمز تعبيري.

أجهزة تعرض رموزًا تعبيرية
الشكل 1. مقارنة الرموز التعبيرية

يمكنك الاطّلاع على المراجع التالية ذات الصلة:

  • نموذج تطبيق متوافق مع الرموز التعبيرية Java | Kotlin

ما هي آلية عمل EmojiCompat؟

توفّر مكتبة دعم "EmojiCompat" إتاحة الرموز التعبيرية المتوافقة مع الأنظمة القديمة على الأجهزة التي تعمل بنظام التشغيل الإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات) والإصدارات الأحدث يمكنك ضبط EmojiCompat إما مع تضمين أو خطوط قابلة للتنزيل. لمزيد من المعلومات حول التهيئة، راجع الأقسام التالية:

تحدِّد السمة EmojiCompat الرموز التعبيرية لعنصر معيّن. CharSequence، يستبدلها بـ EmojiSpans، إذا لزم الأمر، لعرض الرموز التعبيرية والرموز التعبيرية في النهاية. يوضح الشكل 2 العملية.

عملية EmojiCompat
الشكل 2. عملية EmojiCompat

إعدادات الخطوط القابلة للتنزيل

تستخدم إعدادات الخطوط القابلة للتنزيل دعم الخطوط القابلة للتنزيل الجديدة لتنزيل خط الرموز التعبيرية. كما يقوم أيضًا بتحديث البيانات الوصفية للرموز التعبيرية التي EmojiCompat الدعم إلى تحديث أحدث إصدارات يونيكود المواصفات.

إضافة تبعية مكتبة الدعم

لاستخدام مكتبة دعم EmojiCompat، يُرجى اتّباع الخطوات التالية: يجب عليك تعديل تبعيات مسار الفئة لمشروع تطبيقك ضمن لتطوير البرامج.

لإضافة مكتبة دعم إلى مشروع تطبيقك، اتّبِع الخطوات التالية:

  1. افتح ملف build.gradle لتطبيقك.
  2. أضِف مكتبة الدعم إلى القسم dependencies.

Groovy

dependencies {
    ...
    implementation "androidx.emoji:emoji:28.0.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.emoji:emoji:28.0.0")
}

تهيئة الخط القابل للتنزيل الإعدادات

يجب إعداد EmojiCompat من أجل تحميل بيانات التعريف والخط الطباعي. وبما أنّ عملية الإعداد قد تستغرق بعض الوقت يتم تشغيل عملية التهيئة على سلسلة محادثات في الخلفية.

لإعداد EmojiCompat باستخدام السمة تهيئة خط قابلة للتنزيل، عليك تنفيذ الخطوات التالية:

  1. إنشاء مثيل لـ FontRequest فئة وتوفير مرجع موفر الخط، وحزمة موفر الخط، استعلام الخط، وقائمة بمجموعات تجزئات الشهادة. لمزيد من المعلومات، معلومات حول FontRequest، يُرجى الرجوع إلى استخدام الخطوط القابلة للتنزيل آليًا في قسم الخطوط القابلة للتنزيل التوثيق.
  2. إنشاء مثيل FontRequestEmojiCompatConfig مع تقديم أمثلة عن Context FontRequest
  3. إعداد EmojiCompat من خلال استدعاء init() وتمرير مثيل FontRequestEmojiCompatConfig
  4. 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);
       }
    }
    
  5. استخدام تطبيقات "EmojiCompat" المصغّرة في التنسيق ملفات XML. في حال استخدام AppCompat، يُرجى الرجوع إلى استخدام تطبيقات EmojiCompat المصغّرة مع AppCompat .
  6. <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.

مكونات المكتبة

مكوّنات المكتبة في عملية EmojiCompat
الشكل 3. مكوّنات المكتبة في عملية إضافة EmojiCompat
التطبيقات المصغّرة: 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 بـ CANNOT TRANSLATE 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

  1. أضِف مكتبة الدعم إلى قسم الموارد التابعة.

    Groovy

    dependencies {
        ...
        implementation "androidx.emoji:emoji-bundled:$version"
    }
    

    Kotlin

          dependencies {
              implementation("androidx.emoji:emoji-appcompat:$version")
          }
          

    Groovy

          dependencies {
              implementation "androidx.emoji:emoji-appcompat:$version"
          }
          
  2. استخدام "EmojiCompat" AppCompat Widget تطبيقات مصغّرة في التنسيق ملفات XML.
  3. <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 مع ضبط الخط المجمّع، عليك تعديل ضمن بيئة التطوير الخاصة بك.

لإضافة مكتبة دعم إلى مشروع تطبيقك، اتّبِع الخطوات التالية:

  1. افتح ملف build.gradle لتطبيقك.
  2. أضِف مكتبة الدعم إلى القسم dependencies.

Groovy

dependencies {
    ...
    implementation "androidx.emoji:emoji:28.0.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.emoji:emoji:28.0.0")
}

استخدام خطوط مجمّعة لضبط إعدادات EmojiCompat

لاستخدام الخطوط المجمّعة لضبط EmojiCompat، عليك تنفيذ الخطوات التالية:

  1. استخدام "BundledEmojiCompatConfig" لإنشاء مثيل من EmojiCompat وقدّم مثيل Context.
  2. عليك استدعاء 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
  • إذا كان المفتاح موجودًا في الحزمة، فإن القيمة تمثل من البيانات الوصفية للرموز التعبيرية التي يستخدمها التطبيق. وإذا لم يكن هذا المفتاح متوفّر، لا يستخدم التطبيق EmojiCompat.

  • EDITOR_INFO_REPLACE_ALL_KEY
  • إذا كان المفتاح متوفّرًا وتم ضبطه على true، يعني ذلك أنّ دعا التطبيق SetReplaceAll() . لمزيد من المعلومات عن إعداد EmojiCompat، يُرجى الرجوع إلى خيارات الإعداد .

بعد استلام المفاتيح في مجموعة واحدة (EditorInfo.extras)، يمكن للوحة المفاتيح استخدام hasEmojiGlyph() حيث تكون metadataVersion هي قيمة EDITOR_INFO_METAVERSION_KEY, للتحقّق مما إذا كان بإمكان التطبيق عرض رمز تعبيري محدَّد

استخدام ميزة EmojiCompat مع التطبيقات المصغّرة المخصّصة

يمكنك في أي وقت استخدام process(). لمعالجة CharSequence مسبقًا في تطبيقك وإضافة على أي تطبيق مصغّر يمكنه عرض مثيلات Spanned حيث على سبيل المثال، TextView. بالإضافة إلى ذلك، يوفر EmojiCompat التطبيق المصغّر التالي لمساعدتك في تحسين التطبيقات المصغّرة المخصّصة من خلال إتاحة الرموز التعبيرية الحد الأدنى من الجهد.

نموذج TextView

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() {
       ...
   }
}
نموذج EditText

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() {
       ...
   }
}

الأسئلة الشائعة

  • كيف يمكنني بدء تنزيل الخط؟
  • يتم تنزيل خطوط الرموز التعبيرية عند الطلب الأول، إذا لم تكن متوفّرة. على الجهاز. تكون جدولة التنزيل واضحة للتطبيق.

  • كم تستغرق عملية الإعداد؟
  • بعد تنزيل الخط، يستغرق 150 مللي ثانية تقريبًا لإعداد EmojiCompat.

  • ما هو حجم الذاكرة التي تستخدمها ميزة EmojiCompat في المكتبة؟
  • في الوقت الحالي، يتم تحميل بنية البيانات للعثور على الرمز التعبيري في قسم صغيرة وتستخدم حوالي 200 كيلوبايت.

  • هل يمكنني استخدام EmojiCompat مع عنصر TextView مخصّص؟
  • نعم. توفّر ميزة EmojiCompat فئات مساعدة لأدوات مخصّصة. من المهم أيضًا من الممكن معالجة سلسلة معينة مسبقًا وتحويلها إلى Spanned مزيد من المعلومات عن تطبيق "مساعد Google" المصغّر يمكنك الرجوع إلى استخدام ميزة EmojiCompat مع التطبيقات المصغّرة المخصَّصة .

  • ماذا يحدث في حال إضافة تطبيقات مصغّرة بتنسيق XML على الأجهزة التي أن يعمل بنظام التشغيل Android 4.4 (المستوى 19 لواجهة برمجة التطبيقات) أو بإصدار أقدم؟
  • يمكنك تضمين EmojiCompat. مكتبة الدعم أو تطبيقاتها المصغّرة في التطبيقات التي تتوافق مع الأجهزة يعمل بنظام التشغيل Android 4.4 (المستوى 19 لواجهة برمجة التطبيقات) أو أقل. ومع ذلك، إذا كان الجهاز يعمل على إصدار Android أقدم من المستوى 19 لواجهة برمجة التطبيقات "EmojiCompat" وتطبيقاته المصغّرة في "لا عملية" الولاية. هذا يعني أنّ تعمل ميزة EmojiTextView بالضبط. مثل TextView العادي. مثال واحد (EmojiCompat) فورًا في LOAD_STATE_SUCCEEDED الحالة عند استدعاء init() .

مصادر إضافية

لمزيد من المعلومات عن استخدام EmojiCompat المكتبة، وشاهد EmojiCompat.