הסטנדרט של האמוג'י מתעדכן מדי שנה על ידי Unicode, כי השימוש באמוג'י גדל במהירות בכל סוגי האפליקציות.
אם האפליקציה מציגה תוכן מהאינטרנט או מאפשרת הזנת טקסט, מומלץ מאוד לתמוך בגופני האימוג'י העדכניים ביותר. אחרת, יכול להיות שסמלי אמוג'י מאוחרים יותר יוצגו כתיבה מרובעת קטנה שנקראת טופו (☐) או כרצפים אחרים של סמלי אמוג'י שעברו עיבוד שגוי.
בגרסאות Android 11 (רמת API 30) ומטה אי אפשר לעדכן את גופן האימוג'י, ולכן צריך לעדכן ידנית את האפליקציות שמציגות אימוג'י בגרסאות האלה.
דוגמאות לאמוג'י מודרני.
דוגמאות | גרסה |
---|---|
🇨🇶 | 16.0 (ספטמבר 2024) |
🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (ספטמבר 2023) |
🩷 🫸🏼 🐦⬛ | 15.0 (ספטמבר 2022) |
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (ספטמבר 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (ספטמבר 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (מרץ 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (אוקטובר 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (פברואר 2019) |
ספריית androidx.emoji2:emoji2
מספקת תאימות פשוטה יותר לאחור עם גרסאות ישנות יותר של Android. הספרייה emoji2
היא תלות של הספרייה AppCompat
ולא נדרש שום תהליך הגדרה נוסף כדי שהיא תפעל.
תמיכה באמוג'י בכלי הכתיבה
BOM March 2023 (Compose UI 1.4) כולל תמיכה בגרסה העדכנית של האימוג'י, כולל תאימות לאחור לגרסאות ישנות יותר של Android עד API 21. בדף הזה מוסבר איך להגדיר אימוג'י מודרני במערכת View. מידע נוסף זמין בדף אמוג'י בכתיבת הודעה.
דרישות מוקדמות
כדי לוודא שהאפליקציה מציגה כמו שצריך את האימוג'י החדשים, מפעילים אותה במכשיר עם Android מגרסה 10 (רמת API 29) ומטה. בדף הזה יש אמוג'י מודרניים שאפשר להציג לצורך בדיקה.
שימוש ב-AppCompat כדי לתמוך באמוג'י העדכני
AppCompat
1.4 כולל תמיכה באמוג'י.
כדי להשתמש ב-AppCompat
לתמיכה באמוג'י:
בודקים שהמודול תלוי בגרסה 1.4.0-alpha01 או בגרסה מתקדמת יותר של הספרייה
AppCompat
.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
מוודאים שכל הפעילויות שמציגות טקסט מרחיבות את המחלקה
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
כדי לבדוק את השילוב, מפעילים את האפליקציה במכשיר עם Android בגרסה 10 ומטה ומציגים את מחרוזת הבדיקה הבאה. מוודאים שכל התווים מוצגים בצורה תקינה.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
באפליקציה שלכם מוצגים באופן אוטומטי סמלי אמוג'י שתואמים לאחור בכל המכשירים שכוללים ספק גופנים להורדה שתואם ל-emoji2
, כמו מכשירים שמופעלים על ידי Google Play Services.
אם האפליקציה משתמשת ב-AppCompat אבל מוצג בה tofu (☐)
במקרים מסוימים, יכול להיות שהאפליקציה תציג טופו במקום האימוג'י הנכון, גם אם הוספתם את ספריית AppCompat
. אלה הסברים ופתרונות אפשריים.
האפליקציה פועלת במכשיר שבו בוצע לאחרונה פירמוט או באמולטור חדש
כדי לנקות את המטמון של הגופן שנוצר במהלך ההפעלה, מוחקים את הנתונים של האפליקציה ב-Google Play Services. בדרך כלל הבעיה נפתרת אחרי כמה שעות.
כדי לנקות את נתוני האפליקציה:
פותחים את ההגדרות במכשיר Android.
מקישים על אפליקציות והתראות.
מקישים על הצגת כל האפליקציות או על פרטי האפליקציה.
גוללים בין האפליקציות ומקישים על Google Play Services.
מקישים על אחסון ומטמון.
מקישים על ניקוי המטמון.
האפליקציה לא משתמשת במחלקה שקשורה לטקסט ב-AppCompat
זה יכול לקרות אם לא מרחיבים את AppCompatActivity
או אם יוצרים מופע של תצוגה בקוד, כמו TextView
. כדאי לבדוק את הדברים הבאים:
- הפעילות נמשכת
AppCompatActivity
. - אם יוצרים את התצוגה בקוד, צריך להשתמש ב
AppCompat
מחלקת המשנה הנכונה.
AppCompatActivity
מתנפח אוטומטית AppCompatTextView
במקום TextView
כשמנפחים XML, כך שלא צריך לעדכן את ה-XML.
הטלפון לבדיקה לא תומך בגופנים להורדה
מוודאים שהפונקציה DefaultEmojiCompatConfig.create
מחזירה הגדרה שאינה null.
באמולטור ברמת API מוקדמת יותר, לא בוצע שדרוג של Google Play Services
כשמשתמשים באמולטור ברמת API מוקדמת יותר, יכול להיות שיהיה צורך לעדכן את חבילת שירותי Google Play כדי ש-emoji2
יוכל למצוא את ספק הגופנים. כדי לעשות זאת, צריך להתחבר לחנות Google Play באמולטור.
כדי לוודא שמותקנת גרסה תואמת:
מריצים את הפקודה הבאה:
adb shell dumpsys package com.google.android.gms | grep version
מוודאים שערך המדד
versionCode
גבוה יותר מ-211200000
.
תמיכה באמוג'י ללא AppCompat
אם האפליקציה לא יכולה לכלול את AppCompat
, היא יכולה להשתמש ישירות ב-emoji2
. השיטה הזו דורשת יותר עבודה, ולכן כדאי להשתמש בה רק אם האפליקציה לא יכולה להשתמש ב-AppCompat
.
כדי לתמוך באמוג'י בלי הספרייה AppCompat
:
בקובץ
build.gradle
של האפליקציה, כוללים אתemoji2
ואתemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
מודול
emoji2-views
מספק מחלקות משנה שלTextView
,Button
ו-EditText
שמטמיעות אתEmojiCompat
. אל תשתמשו בו באפליקציה שכוללת אתAppCompat
, כי הוא כבר מיושם ב-EmojiCompat
.ב-XML ובקוד – בכל מקום שבו משתמשים ב-
TextView
, ב-EditText
או ב-Button
– צריך להשתמש במקום זאת ב-EmojiTextView
, ב-EmojiEditText
או ב-EmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
אם כוללים את המודול
emoji2
, המערכת משתמשת בספק ברירת המחדל של גופנים להורדה כדי לטעון את גופן האימוג'י באופן אוטומטי זמן קצר אחרי הפעלת האפליקציה. אין צורך בהגדרות נוספות.כדי לבדוק את השילוב, מפעילים את האפליקציה במכשיר עם Android 11 או גרסה מוקדמת יותר, שבו מוצגים מחרוזות הבדיקה הבאות. מוודאים שכל התווים מוצגים בצורה תקינה.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
שימוש ב-EmojiCompat ללא ווידג'טים
EmojiCompat
משתמש ב-EmojiSpan
כדי להציג תמונות תקינות. לכן, הוא צריך להמיר כל אובייקט CharSequence
לאובייקט Spanned
עם אובייקטים EmojiSpan
.
המחלקות EmojiCompat מספקות את השיטה process()
להמרה של CharSequences
למופעים של Spanned
. באמצעות השיטה הזו, אפשר לקרוא ל-process()
ברקע ולשמור את התוצאות במטמון, וכך לשפר את הביצועים של האפליקציה.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
שימוש ב-EmojiCompat עבור עורכי שיטות קלט
הסיווג EmojiCompat
מאפשר למקלדות לעבד את האמוג'י שנתמכים באפליקציה שהן פועלות בה. עורכי שיטות קלט (IME) יכולים להשתמש בשיטה getEmojiMatch()
כדי לבדוק אם מופע של EmojiCompat
יכול להציג אימוג'י. השיטה הזו מקבלת CharSequence
של אמוג'י ומחזירה true
אם EmojiCompat
יכול לזהות את האמוג'י ולהציג אותו.
המקלדת יכולה גם לבדוק את הגרסה של EmojiCompat
שהאפליקציה תומכת בה כדי לקבוע אילו אמוג'י יוצגו בלוח. כדי לבדוק את הגרסה, אם היא זמינה, המקלדת יכולה לחפש את המקשים הבאים בחבילה EditorInfo.extras
:
-
EDITOR_INFO_METAVERSION_KEY
: מייצג את הגרסה של מטא-נתוני האימוג'י שבה נעשה שימוש באפליקציה. אם המפתח הזה לא קיים, סימן שהאפליקציה לא משתמשת ב-EmojiCompat
. -
EDITOR_INFO_REPLACE_ALL_KEY
: אם המפתח קיים והערך שלו הואtrue
, האפליקציה מגדירה אתEmojiCompat
להחלפת כל האמוג'י, גם אם הם קיימים במערכת.
מידע נוסף על הגדרת מופע של EmojiCompat
שימוש באמוג'י בתצוגות בהתאמה אישית
אם באפליקציה שלכם יש תצוגות מותאמות אישית שהן מחלקות משנה ישירות או עקיפות של TextView
– לדוגמה, Button
, Switch
או EditText
– והתצוגות האלה יכולות להציג תוכן שנוצר על ידי משתמשים, כל אחת מהן צריכה להטמיע את EmojiCompat
.
התהליך משתנה בהתאם לספריית AppCompat
שבה האפליקציה משתמשת.
הוספה של תצוגות מותאמות אישית לאפליקציות עם AppCompat
אם האפליקציה שלכם משתמשת ב-AppCompat
, צריך להרחיב את ההטמעה של AppCompat
במקום את ההטמעה של הפלטפורמה. הטבלה הבאה יכולה לעזור לכם להבין איך להרחיב את התצוגות ב-AppCompat
:
במקום להאריך את המינוי... | הארכה |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
הוספה של תצוגות בהתאמה אישית לאפליקציות ללא AppCompat
אם האפליקציה לא משתמשת ב-AppCompat
, אפשר להשתמש בפונקציות העזר לשילוב תצוגות במודול emoji2-views-helper
שנועדו לשימוש בתצוגות בהתאמה אישית. אלה הן פונקציות העזר שספריית AppCompat
משתמשת בהן כדי להטמיע תמיכה באמוג'י.
כדי לתמוך בתצוגות מותאמות אישית באפליקציות שלא משתמשות ב-AppCompat
, פועלים לפי השלבים הבאים.
מוסיפים את הספרייה
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
פועלים לפי ההוראות כדי לכלול את
EmojiTextViewHelper
או אתEmojiEditTextHelper
בתצוגות המותאמות אישית של האפליקציה.כדי לבדוק את השילוב, מפעילים את האפליקציה במכשיר עם Android בגרסה 10 ומטה ומציגים את מחרוזת הבדיקה הבאה. מוודאים שכל התווים מוצגים בצורה תקינה.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
תכונות אופציונליות לטיפול ב-emoji2
אחרי שכוללים את ספריית emoji2
באפליקציה, אפשר להוסיף את התכונות האופציונליות שמתוארות בקטע הזה.
הגדרה של emoji2 לשימוש בגופן אחר או בספק גופנים להורדה
כדי להגדיר את emoji2
כך שישתמש בגופן אחר או בספק גופנים אחרים שאפשר להוריד, צריך:
כדי להשבית את
EmojiCompatInitializer
מוסיפים את השורה הבאה למניפסט:<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" tools:node="remove" /> </provider>
מבצעים אחת מהפעולות הבאות:
כדי להשתמש בהגדרת ברירת המחדל, קוראים ל-
DefaultEmojiCompatConfiguration.create(context)
.אפשר ליצור תצורה משלכם כדי לטעון גופנים ממקור אחר באמצעות
EmojiCompat.Config
. בקטע הבא מוסבר על האפשרויות השונות שקיימות במחלקה הזו לשינוי ההתנהגות שלEmojiCompat
.
שינוי ההתנהגות של EmojiCompat
אפשר להשתמש במופע של EmojiCompat.Config
כדי לשנות את ההתנהגות של EmojiCompat
.
אפשרות ההגדרה החשובה ביותר היא setMetadataLoadStrategy()
, שקובעת מתי EmojiCompat
טוען את הגופן. טעינת הגופן מתחילה ברגע שמפעילים את התג EmojiCompat.load()
, והפעלה כזו גורמת להורדות הנדרשות. המערכת יוצרת שרשור להורדת הגופן, אלא אם האפליקציה מספקת שרשור כזה.
LOAD_STRATEGY_MANUAL
מאפשר לשלוט מתי מתבצעת הקריאה ל-EmojiCompat.load()
, ו-LOAD_STRATEGY_DEFAULT
גורם לטעינה להתחיל באופן סינכרוני בקריאה ל-EmojiCompat.init()
.
רוב האפליקציות משתמשות ב-LOAD_STRATEGY_MANUAL
כדי לשלוט בשרשור ובזמן של טעינת הגופן. כדי למנוע השהיה בהפעלה, האפליקציה צריכה להמתין עד שהמסך הראשון מוצג. EmojiCompatInitializer
פועל לפי השיטה הזו ומשהה את טעינת הגופן של האמוג'י עד אחרי שהמסך הראשון חוזר לפעולה.
משתמשים בשיטות הבאות ממחלקת הבסיס כדי להגדיר היבטים אחרים של ההגדרה:
-
setReplaceAll()
: קובע אםEmojiCompat
מחליף את כל האמוג'י שהוא מוצא במופעים שלEmojiSpan
. כברירת מחדל, כש-EmojiCompat
מסיק שהמערכת יכולה להציג אמוג'י, הוא לא מחליף את האמוג'י הזה. אם ההגדרה היאtrue
,EmojiCompat
כל האמוג'י יוחלפו באובייקטיםEmojiSpan
. -
setEmojiSpanIndicatorEnabled()
: מציין אםEmojiCompat
מחליף אמוג'י באובייקטEmojiSpan
. כשמגדירים את הערךtrue
,EmojiCompat
מצייר רקע ל-EmojiSpan
. השיטה הזו משמשת בעיקר למטרות ניפוי באגים. -
setEmojiSpanIndicatorColor
: מגדיר את הצבע לציוןEmojiSpan
. ערך ברירת המחדל הואGREEN
. -
registerInitCallback()
: מודיע לאפליקציה על מצב ההפעלה שלEmojiCompat
.
הוספת מאזינים לאתחול
המחלקות EmojiCompat
ו-EmojiCompat.Config
מספקות את השיטות registerInitCallback()
ו-unregisterInitCallback()
לרישום ולביטול רישום של קריאות חוזרות לאתחול. האפליקציה משתמשת בפונקציות
הקריאה החוזרת האלה כדי להמתין עד לאתחול של EmojiCompat
לפני עיבוד סמלי אמוג'י בשרשור רקע או בתצוגה מותאמת אישית.
כדי להשתמש בשיטות האלה, צריך ליצור מופע של המחלקה EmojiCompat.InitCallback
. קוראים לשיטות האלה ומעבירים את המופע של המחלקה EmojiCompat.InitCallback
. אם האתחול מצליח, המחלקה EmojiCompat
קוראת לשיטה onInitialized()
. אם האתחול של הספרייה נכשל, הקלאס EmojiCompat
קורא ל-method onFailed()
.
כדי לבדוק את מצב האתחול בכל שלב, צריך לבצע קריאה ל-method getLoadState()
. השיטה הזו מחזירה אחד מהערכים הבאים: LOAD_STATE_LOADING
, LOAD_STATE_SUCCEEDED
או LOAD_STATE_FAILED
.
תמיכה בגופנים בחבילה עם emoji2
אפשר להשתמש בארטיפקט emoji2-bundled
כדי לארוז גופן של אמוג'י באפליקציה.
עם זאת, מכיוון שהגופן NotoColorEmoji
גדול מ-10MB, מומלץ מאוד להשתמש בגופנים שאפשר להוריד באפליקציה, אם אפשר. Artifact emoji2-bundled
מיועד לאפליקציות במכשירים שלא תומכים בגופנים להורדה.
כדי להשתמש בארטפקט emoji2-bundled
:
כולל פריטי מידע שנוצרו בתהליך פיתוח (Artifact) של
emoji2-bundled
ושלemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
מגדירים את
emoji2
לשימוש בהגדרה שצורפה:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
כדי לבדוק את ההטמעה, פועלים לפי השלבים הקודמים להוספת
emojicompat
עם או בליAppCompat
. מוודאים שמחרוזת הבדיקה מוצגת בצורה נכונה.- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
ההשפעה של הגדרה אוטומטית של EmojiCompat
המערכת מחילה הגדרת ברירת מחדל באמצעות ספריית ההפעלה,
EmojiCompatInitializer
, ו-
DefaultEmojiCompatConfig
.
אחרי שהפעילות הראשונה מתחדשת באפליקציה, קובץ האתחול מתזמן טעינה של גופן אימוג'י. העיכוב הקצר הזה מאפשר לאפליקציה להציג את התוכן הראשוני שלה בלי השהיה פוטנציאלית בגלל טעינת הגופן בשרשור רקע.
DefaultEmojiCompatConfig
מחפש ספק של גופנים להורדה שהותקן במערכת ומיישם את הממשק EmojiCompat
, כמו שירותי Google Play. במכשירים שמופעלים על ידי Google Play Services, הגופן נטען באמצעות Google Play Services.
הפונקציה initializer יוצרת שרשור ברקע כדי לטעון את גופן האמוג'י, וההורדה של הגופן יכולה להימשך עד 10 שניות לפני שנגמר הזמן הקצוב לתפוגה. אחרי שהגופן מורד, לוקח בערך 150 אלפיות השנייה בשרשור רקע כדי לאתחל את EmojiCompat
.
עיכוב האתחול של EmojiCompat
, גם אם משביתים את EmojiCompatInitializer
. אם מגדירים את האפליקציה באופן ידני
EmojiCompat
, צריך להתקשר אל EmojiCompat.load()
אחרי שהמסך הראשון של האפליקציה מוצג כדי למנוע התנגשות ברקע עם טעינת המסך הראשון.
אחרי הטעינה, EmojiCompat
משתמש בכ-300KB של RAM כדי לשמור את המטא-נתונים של האימוג'י.