בספריית התמיכה של EmojiCompat
אנחנו שואפים
לעדכן מכשירי Android לגבי סמלי האמוג'י האחרונים. היא מונעת מהאפליקציה להציג תווים חסרים באמוג'י בפורמט ☐, שמציין שאין במכשיר גופן להצגת הטקסט. כשמשתמשים בספריית התמיכה EmojiCompat
, משתמשי האפליקציה לא צריכים להמתין לעדכונים של Android OS כדי לקבל את הסמלי ה-emoji העדכניים ביותר.
כדאי לעיין במקורות המידע הבאים:
איך פועל EmojiCompat?
ספריית התמיכה EmojiCompat
מספקת כיתות להטמעת תמיכה בסמלי אמוג'י עם תאימות לאחור במכשירים עם Android מגרסה 4.4 (API ברמה 19) ואילך. אפשר להגדיר את EmojiCompat
עם גופנים בחבילה או עם גופנים שניתנים להורדה. למידע נוסף על הגדרות, קראו את הסעיפים הבאים:
EmojiCompat
מזהה אמוג'י עבור CharSequence
נתון, מחליף אותם ב-EmojiSpans
אם צריך, ובסופו של דבר מעבד את הגליפים של האמוג'י. איור 2 מדגים את התהליך.
הגדרת גופנים שניתן להורדה
ההגדרה של גופני ההורדה משתמשת בתכונה של ספריית התמיכה של גופני ההורדה כדי להוריד גופן אמוג'י. הוא גם מעדכן את המטא-נתונים הנדרשים של אמוג'י שספריית התמיכה EmojiCompat
צריכה כדי לעמוד בגרסאות האחרונות של מפרט Unicode.
הוספת תלות בספריית תמיכה
כדי להשתמש בספריית התמיכה EmojiCompat
, צריך לשנות את יחסי התלות של classpath בפרויקט האפליקציה בסביבת הפיתוח.
כדי להוסיף ספריית תמיכה לפרויקט האפליקציה:
- פותחים את הקובץ
build.gradle
של האפליקציה. - צריך להוסיף את ספריית התמיכה לקטע
dependencies
.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
אתחול התצורה של הגופן שניתן להורדה
צריך לאתחל את EmojiCompat
כדי לטעון את המטא-נתונים ואת הגופן. מכיוון שההפעלה הראשונית עשויה להימשך זמן מה, תהליך ההפעלה הראשונית פועל בשרשור ברקע.
כדי לאתחל את EmojiCompat
עם הגדרות הגופן שניתן להוריד, מבצעים את השלבים הבאים:
- יוצרים מופע של הכיתה
FontRequest
ומספקים את הרשות של ספק הגופן, את החבילה של ספק הגופן, את השאילתה לגופן ואת רשימת הקבוצות של הגיבוב לאישור. מידע נוסף עלFontRequest
זמין בקטע שימוש בגופנים שניתן להוריד באופן פרוגרמטי במסמכי העזרה של גופנים שניתן להוריד. - יוצרים מכונה של
FontRequestEmojiCompatConfig
ומספקים מכונות שלContext
ו-FontRequest
. - מפעילים את השיטה
init()
כדי לאתחל אתEmojiCompat
ומעבירים את המופע של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
עם הגדרת הגופן שניתן להורדה זמין באפליקציית הדוגמה ל-Emoji Compatibility ב-Java
| Kotlin.
רכיבי הספרייה
- ווידג'טים:
EmojiEditText
,EmojiTextView
,EmojiButton
- הטמעות ברירת מחדל של ווידג'טים לשימוש ב-
EmojiCompat
עםTextView
,EditText
ו-Button
. EmojiCompat
- הדף הציבורי הראשי של ספריית התמיכה. הוא מבצע את כל הקריאות החיצוניות ומתאם עם החלקים האחרים במערכת.
EmojiCompat.Config
- הגדרת המכונה היחידה (singleton) שתיווצר.
EmojiSpan
- תת-מחלקה
ReplacementSpan
שמחליפה את התו (רצפים) ומעבדת את הגליף. EmojiCompat
גופןEmojiCompat
משתמשת בגופן כדי להציג אמוג'י. הגופן הזה הוא גרסה שונה של גופן האמוג'י של Android. הגופן ישתנה באופן הבא:- כדי לספק תאימות לאחור לעיבוד אמוג'י, כל תווים האמוג'י מיוצגים בנקודת קוד אחת ב-Unicode, באזור ה-A המשלים לשימוש פרטי, החל מ-U+F0001.
-
מטא-נתונים נוספים של אמוג'י מוכנסים בפורמט בינארי לגופן
ומנותחים בזמן הריצה על ידי
EmojiCompat
. הנתונים מוטמעים בטבלהmeta
של הגופן, עם התג הפרטי Emji.
אפשרויות תצורה
אפשר להשתמש במכונה EmojiCompat
כדי לשנות את ההתנהגות של EmojiCompat
. כדי להגדיר את ההגדרות, אפשר להשתמש בשיטות הבאות מהקלאס הבסיסי:
setReplaceAll()
: קובע אםEmojiCompat
יחליף את כל האמוג'י שהוא מוצא ב-EmojiSpans
. כברירת מחדל, הפונקציהEmojiCompat
מנסה כמיטב יכולתה להבין אם המערכת יכולה להציג אמוג'י מסוים, ולא מחליפה את האמוג'י האלה. כשהערך שלEmojiCompat
מוגדר כ-true
, הוא מחליף את כל סמלי האמוג'י שהוא מוצא ב-EmojiSpans
.setEmojiSpanIndicatorEnabled()
: מציין אםEmojiCompat
החליף אמוג'י ב-EmojiSpan
. כשהערך שלtrue
הואtrue
, ה-EmojiCompat
מצייר רקע ל-EmojiSpan
. השיטה הזו משמשת בעיקר למטרות ניפוי באגים.setEmojiSpanIndicatorColor()
: הגדרת הצבע לציוןEmojiSpan
. ערך ברירת המחדל הואGREEN
.registerInitCallback
: מעדכן את האפליקציה לגבי המצב של ה-initialization של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()
לרישום קריאה חוזרת (callback) לאתחול. כדי להשתמש בשיטות האלה, צריך ליצור מכונה של הכיתה 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
.
- מוסיפים את ספריית התמיכה לקטע של יחסי התלות.
Groovy
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Groovy
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
.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
שימוש בגופנים בחבילה כדי להגדיר אתmojiCompat
כדי להשתמש בגופנים בחבילה כדי להגדיר את EmojiCompat
:
- משתמשים ב-
BundledEmojiCompatConfig
כדי ליצור מכונה שלEmojiCompat
ולספק מכונה שלContext
. - קוראים ל-method
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");
שימוש באמוג'י ל-IMEs
באמצעות ספריית התמיכה של 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
, המקלדת יכולה להשתמש ב-method hasEmojiGlyph()
, כאשר metadataVersion
הוא הערך של EDITOR_INFO_METAVERSION_KEY
, כדי לבדוק אם האפליקציה יכולה להציג אמוג'י ספציפי.
שימוש באמוג'י שתואם לווידג'טים מותאמים אישית
תמיד אפשר להשתמש ב-method 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 של פריסה במכשירים שפועלת בהם מערכת Android מגרסה 4.4 (API ברמה 19) ומטה?
גופני האמוג'י מורידים בבקשה הראשונה, אם הם לא קיימים במכשיר. תזמון ההורדה שקוף לאפליקציה.
לאחר הורדת הגופן, אתחול EmojiCompat
יימשך כ-150 אלפיות השנייה.
נכון לעכשיו, מבנה הנתונים לחיפוש האמוג'י נטען בזיכרון של האפליקציה ומשתמש ב-200KB בערך.
כן. EmojiCompat מספק כיתות עזר לווידג'טים מותאמים אישית. אפשר גם לעבד מחרוזת נתונה ולבצע לה המרה ל-Spanned
. מידע נוסף על כיתות עזר של ווידג'טים זמין בקטע שימוש ב-EmojiCompat עם ווידג'טים מותאמים אישית.
אפשר לכלול את ספריית התמיכה EmojiCompat
או את הווידג'טים שלה באפליקציות שתומכות במכשירים עם Android מגרסה 4.4 (רמת API 19) ומטה. עם זאת, אם במכשיר פועלת גרסה של Android שקדמה לרמת API 19, EmojiCompat
והווידג'טים שלו נמצאים במצב 'אין פעולה'. המשמעות היא
שהשדה EmojiTextView
פועל בדיוק כמו TextView
רגיל.
מכונה של EmojiCompat
, והיא עוברת למצב LOAD_STATE_SUCCEEDED
מיד אחרי שמפעילים את השיטה init()
.
מקורות מידע נוספים
למידע נוסף על השימוש בספרייה EmojiCompat
, אפשר לצפות בסרטון EmojiCompat.