תאימות לאמוג'י

המטרה של ספריית התמיכה של EmojiCompat היא עדכן מכשירי Android כדי להשתמש בסמלי האמוג'י האחרונים. הוא מונע מהאפליקציה מהצגת תווי אמוג'י חסרים בפורמט ☐, מציין שהמכשיר לא כולל גופן להצגת הטקסט. על ידי באמצעות ספריית התמיכה של EmojiCompat, משתמשי האפליקציה לא צריכים לחכות לעדכונים של Android OS כדי לקבל את הגרסה האחרונה. אמוג'י.

מכשירים שמוצגים בהם סמלי אמוג'י
איור 1. השוואת סמלי אמוג'י

כדאי לעיין במקורות המידע שקשורים לנושא:

  • אפליקציה לדוגמה של תאימות לאמוג'י Java | Kotlin

איך האמוג'י עובד?

ספריית התמיכה של EmojiCompat כוללת כדי להטמיע תמיכה באמוג'י בתאימות לאחור במכשירים פועלים Android בגרסה 4.4 (רמת API 19) ואילך. אפשר להגדיר EmojiCompat במסגרת חבילה או גופנים שניתנים להורדה. למידע נוסף על הגדרות אישיות, אפשר לעיין לסעיפים הבאים:

EmojiCompat מזהה אמוג'י מסוים CharSequence, מחליף אותם ב- EmojiSpans, אם נדרש, וגם בסוף מעבדת את הגליפים של האמוג'י. איור 2 מדגים את התהליך.

תהליך התאמת האמוג'י
איור 2. תהליך התאימות לאמוג'י

הגדרת גופנים שניתנים להורדה

ההגדרה של הגופנים שניתנת להורדה משתמשת בתמיכה בגופנים שניתנים להורדה לספרייה להורדת גופן אמוג'י. היא גם מעדכנת את מטא-נתונים של אמוג'י שEmojiCompat בספריית התמיכה צריך להתעדכן בגרסאות האחרונות של ה-Unicode למפרט.

הוספת תלות של ספריות תמיכה

כדי להשתמש בספריית התמיכה של EmojiCompat: צריך לשנות את יחסי התלות של נתיב הכיתות של פרויקט האפליקציה סביבת פיתוח.

כדי להוסיף ספריית תמיכה לפרויקט האפליקציה:

  1. פותחים את הקובץ build.gradle של האפליקציה.
  2. צריך להוסיף את ספריית התמיכה לקטע dependencies.

מגניב

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, לעיין שימוש בווידג'טים של אמוג'י תואם עם 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 | קוטלין.

רכיבי הספרייה

רכיבי ספרייה בתהליך התאימות של אמוג&#39;י
איור 3. רכיבי הספרייה בתהליך התאימות של האמוג'י
ווידג'טים: EmojiEditText, EmojiTextView, EmojiButton
הטמעות ברירת מחדל של ווידג'טים לשימוש EmojiCompat עם TextView, EditText וגם Button
EmojiCompat
הפלטפורמה הציבורית הראשית של ספריית התמיכה. הוא מבצע את כל שיחות חיצוניות וקואורדינטות עם חלקים אחרים של המערכת.
EmojiCompat.Config
מגדירים את מכונת ה-Singleton שתיווצר.
EmojiSpan
תת-מחלקה ReplacementSpan שמחליף את (רצף) ומעבד את הגליף.
גופן EmojiCompat
EmojiCompat משתמשת בגופן כדי להציג אמוג'י. גופן זה הוא גרסה שעברה שינוי של גופן אמוג'י ב-Android. הגופן ישתנה באופן הבא:
  • כדי לשמור על תאימות לאחור לרנדר של האמוג'י, כל סמלי האמוג'י צריכים מיוצגים באמצעות נקודת קוד אחת של Unicode האזור המשלים של Unicode לשימוש פרטי ב-Unicode מתחיל ב-U+F0001.
  • מטא-נתונים נוספים של אמוג'י מוכנסים בפורמט בינארי לגופן. מנותח בזמן הריצה לפי EmojiCompat הנתונים מוטמעים בטבלת הגופן meta, באמצעות התג הפרטי Emji.

אפשרויות תצורה

אפשר להשתמש במכונה EmojiCompat כדי לשנות את ההתנהגות של EmojiCompat. אפשר להשתמש את ה-methods הבאות ממחלקת הבסיס כדי להגדיר את התצורה:

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() שיטות לרישום קריאה חוזרת (callback) לאתחול. כדי להשתמש בשיטות האלה, צריך ליצור מופע של כיתה אחת (EmojiCompat.InitCallback). שיחת טלפון האלה ומעבירים את המופע כיתה אחת (EmojiCompat.InitCallback). כאשר אתחול התמיכה ב-EmojiCompat הצלחת, EmojiCompat הכיתה קוראת ל onInitialized() . אם הספרייה לא ניתן לאתחל, את EmojiCompat הכיתה קוראת ל onFailed() .

כדי לבדוק את מצב האתחול בכל שלב, מפעילים את הפונקציה getLoadState() . היא מחזירה את אחד מהערכים הבאים: LOAD_STATE_LOADING, LOAD_STATE_SUCCEEDED, או LOAD_STATE_FAILED.

שימוש ב-mojiCompat עם ווידג'טים של AppCompat

אם משתמשים ב-AppCompat widgets, יכול להשתמש בווידג'טים של EmojiCompat שמרחיבים מ-AppCompat widgets.

  1. מוסיפים את ספריית התמיכה לקטע של יחסי התלות.

    מגניב

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

    Kotlin

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

    מגניב

          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 בהגדרת הגופן בחבילה, חייבים לשנות את הפרויקט של האפליקציה ותלויות ב-classpath בסביבת הפיתוח שלכם.

כדי להוסיף ספריית תמיכה לפרויקט האפליקציה:

  1. פותחים את הקובץ build.gradle של האפליקציה.
  2. צריך להוסיף את ספריית התמיכה לקטע dependencies.

מגניב

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

Kotlin

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

שימוש בגופנים בחבילה כדי להגדיר אתmojiCompat

כדי להשתמש בגופנים בחבילה לצורך הגדרה 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 שימושים 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");

שימוש בהתאמת אמוג'י ל-IME

באמצעות ספריית התמיכה של EmojiCompat, מקלדות יכולות לעבד את האמוג'י שנתמך על ידי האפליקציה שבה קיום אינטראקציה. עורכי שיטות קלט יכולים להשתמש hasEmojiGlyph() כדי לבדוק אם EmojiCompat יכול של עיבוד אמוג'י. השיטה הזו לוקחת CharSequence אמוג'י ומחזיר את הערך true אם EmojiCompat יכול לזהות ולעבד את אמוג'י.

המקלדת יכולה גם לבדוק את הגרסה של יש תמיכה בספריית EmojiCompat שהאפליקציה תומכת בה כדי לקבוע איזה אמוג'י יוצג בלוח הצבעים. כדי לבדוק את אם זמינה, המקלדת צריכה לבדוק אם המפתחות שנמצאים EditorInfo.extras Bundle:

אחרי קבלת המפתחות חבילה אחת (EditorInfo.extras), המקלדת יכולה להשתמש hasEmojiGlyph() כאשר metadataVersion הוא הערך של EDITOR_INFO_METAVERSION_KEY, כדי לבדוק אם האפליקציה יכולה לעבד אמוג'י מסוים.

שימוש באמוג'י שתואם לווידג'טים מותאמים אישית

תמיד אפשר להשתמש בprocess() לעיבוד מראש של CharSequence באפליקציה ולהוסיף לכל ווידג'ט שיכול לעבד Spanned מופעים. עבור לדוגמה, TextView. In addition, EmojiCompat מספק את הווידג'ט הבא כיתות Assistant שמאפשרות לך להעשיר את הווידג'טים המותאמים אישית עם תמיכה באמוג'י במאמץ מינימלי.

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.

  • בכמה זיכרון נעשה שימוש בספריית התמיכה של אמוג'י?
  • בשלב הזה, מבנה הנתונים שבו מאתרים את האמוג'י נטען והוא משתמש בכ-200KB.

  • האם אפשר להשתמש ב-mojiCompat ביצירת TextView בהתאמה אישית?
  • כן. אמוג'י קומפט מספק מחלקות סיוע לווידג'טים מותאמים אישית. כמו כן שאפשר לעבד מראש מחרוזת נתונה ולהמיר אותה Spanned למידע נוסף על כלי העזר לווידג'טים מתייחסים שימוש באמוג'י שתואם לווידג'טים בהתאמה אישית .

  • מה קורה אם מוסיפים ווידג'טים לפריסות XML במכשירים פועל ב-Android מגרסה 4.4 (רמת API 19) ומטה?
  • אפשר לכלול את EmojiCompat תמיכה בספרייה או בווידג'טים שלה באפליקציות שתומכות במכשירים שפועלת בהם מערכת Android מגרסה 4.4 (רמת API 19) ומטה. עם זאת, אם מכשיר בגרסת Android שלפני רמת API 19, EmojiCompat והווידג'טים שלו נמצאים 'ללא פעולה' . המשמעות היא EmojiTextView מתנהג בדיוק כמו TextView רגיל. מופע EmojiCompat; את המידע באופן מיידי נכנס למצב LOAD_STATE_SUCCEEDED כשקוראים לפונקציה init() .

מקורות מידע נוספים

לקבלת מידע נוסף על השימוש EmojiCompat הספרייה EmojiCompat.