קבוצת האמוג'י הרגילה מתעדכנת מדי שנה על ידי Unicode, כי השימוש באמוג'י הולך וגדל במהירות בכל סוגי האפליקציות.
אם האפליקציה מציגה תוכן מהאינטרנט או מספקת קלט טקסט, מומלץ מאוד לתמוך בגופנים העדכניים ביותר של אמוג'י. אחרת, יכול להיות שסמלי האמוג'י הבאים יוצגו כקופסה קטנה ריבועית שנקראת טופו (☐) או כרצפים אחרים של אמוג'י שהומרו בצורה שגויה.
בגרסאות Android 11 (רמת API 30) וגרסאות ישנות יותר אי אפשר לעדכן את גופן הסמלי הרגשי, ולכן צריך לעדכן באופן ידני את האפליקציות שמוצגים בהן סמלי הרגשי בגרסאות האלה.
בהמשך מוצגות דוגמאות לאמוג'י מודרני.
דוגמאות | גרסה |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (ספטמבר 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (ספטמבר 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (מרץ 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (אוקטובר 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (פברואר 2019) |
ספריית androidx.emoji2:emoji2
מספקת תאימות לאחור פשוטה יותר לגרסאות ישנות יותר של Android. ספריית emoji2
תלויה בספרייה AppCompat
, ולא נדרשת הגדרה נוספת כדי שהיא תפעל.
תמיכה באמוג'י בחלונית הכתיבה
BOM מרץ 2023 (Compose UI 1.4) כולל תמיכה בגרסה האחרונה של אמוג'י, כולל תאימות לאחור לגרסאות Android ישנות יותר עד API 21. בדף הזה מוסבר איך להגדיר סמלי אמוג'י מודרניים במערכת התצוגה. מידע נוסף זמין בדף אמוג'י בכתיבה.
דרישות מוקדמות
כדי לוודא שהאפליקציה מציגה בצורה תקינה אמוג'י חדשים יותר, צריך להפעיל אותה במכשיר עם Android מגרסה 10 (רמת API 29) ואילך. בדף הזה מופיעים אמוג'י מודרניים שאפשר להציג לצורך בדיקה.
שימוש ב-AppCompat כדי לתמוך באמוג'י העדכניים ביותר
AppCompat
1.4 כולל תמיכה באמוג'י.
כדי להשתמש ב-AppCompat
כדי לתמוך באמוג'י:
בודקים שהמודול תלוי בספריית
AppCompat
בגרסה 1.4.0-alpha01 ואילך.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 או גרסאות קודמות ומציגים את מחרוזת הבדיקה הבאה. מוודאים שכל התווים מוצגים בצורה תקינה.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ❄️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
האפליקציה תציג באופן אוטומטי אמוג'י עם תאימות לאחור בכל המכשירים שמספקים ספק גופנים שניתן להורדה ותואמת ל-emoji2
, כמו מכשירים שמופעל בהם Google Play Services.
אם האפליקציה שלכם משתמשת ב-AppCompat אבל מוצגת בה הודעה על טופיו (☐)
במקרים מסוימים, יכול להיות שבאפליקציה יוצג טופו במקום האמוג'י המתאים, גם אם תוסיפו את הספרייה 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 ומטה, ומציגים את מחרוזות הבדיקה הבאות. ודאו שכל התווים מעובדים כמו שצריך.
- 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
, שמיועדים לשימוש בתצוגות בהתאמה אישית. אלה הם ה-helpers שבהם נעשה שימוש בספרייה AppCompat
כדי להטמיע תמיכה באמוג'י.
כדי לתמוך בתצוגות בהתאמה אישית לאפליקציות שלא משתמשות ב-AppCompat
, צריך לבצע את השלבים הבאים:
מוסיפים את הספרייה
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
פועלים לפי ההוראות כדי לכלול את
EmojiTextViewHelper
או אתEmojiEditTextHelper
בתצוגות בהתאמה אישית של האפליקציה.כדי לבדוק את השילוב, מריצים את האפליקציה במכשיר עם Android בגרסה 10 או גרסאות קודמות ומציגים את מחרוזת הבדיקה הבאה. מוודאים שכל התווים מוצגים בצורה תקינה.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ❄️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
תכונות אופציונליות לטיפול באמוג'י 2
אחרי שכוללים את ספריית 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
פועל בהתאם לשיטה הזו ודוחה את טעינת גופן האמוג'י עד שמתחדש המסך הראשון.
משתמשים ב-methods הבאות ממחלקת הבסיס כדי להגדיר היבטים אחרים של ההגדרה:
setReplaceAll()
: קובע אםEmojiCompat
מחליף את כל האמוג'י שהוא מוצא באירועים שלEmojiSpan
. כברירת מחדל, כש-EmojiCompat
מסיקה שהמערכת יכולה לעבד אמוג'י, היא לא מחליפה את האמוג'י הזה. כשהערך שלEmojiCompat
מוגדר כ-true
, כל סמלי האמוג'י מוחלפים באובייקטים מסוגEmojiSpan
.setEmojiSpanIndicatorEnabled()
: מציין אםEmojiCompat
מחליף אמוג'י באובייקטEmojiSpan
. כשהערך שלtrue
הואtrue
,EmojiCompat
מצייר רקע ל-EmojiSpan
. השיטה הזו משמשת בעיקר למטרות ניפוי באגים.setEmojiSpanIndicatorColor
: מגדיר את הצבע כדי לצייןEmojiSpan
. ערך ברירת המחדל הואGREEN
.registerInitCallback()
: מודיע לאפליקציה על מצב האתחול שלEmojiCompat
.
הוספת מאזינים לאתחול
הכיתות EmojiCompat
ו-EmojiCompat.Config
מספקות את השיטות registerInitCallback()
ו-unregisterInitCallback()
לרישום ולביטול רישום של פונקציות קריאה חוזרת (callbacks) לצורך אתחול. האפליקציה משתמשת בקריאות החוזרות האלה כדי להמתין עד ש-EmojiCompat
יופעל לפני שמעבדים אמוג'י בשרשור ברקע או בתצוגה בהתאמה אישית.
כדי להשתמש בשיטות האלה, צריך ליצור מופע של הכיתה EmojiCompat.InitCallback
. קוראים לשיטות האלה ומעבירים את המופע של הכיתה EmojiCompat.InitCallback
. אם האיניציאליזציה מסתיימת בהצלחה, הכיתה EmojiCompat
קוראת לשיטה onInitialized()
. אם הספרייה לא מופעלת, הכיתה EmojiCompat
קוראת ל-method onFailed()
.
כדי לבדוק את מצב האיפוס בכל שלב, צריך לבצע קריאה ל-method getLoadState()
. השיטה הזו מחזירה אחד מהערכים הבאים:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
או
LOAD_STATE_FAILED
.
תמיכה בגופנים בחבילה עם emoji2
אפשר להשתמש ב-artifact emoji2-bundled
כדי לצרף לאפליקציה גופן של אמוג'י.
עם זאת, מכיוון שהגוף NotoColorEmoji
גדול מ-10MB, מומלץ מאוד להשתמש באפליקציה בגופנים שניתן להורדה כשהדבר אפשרי. הארטיפקט emoji2-bundled
מיועד לאפליקציות במכשירים שלא תומכים בגופנים שניתן להוריד.
כדי להשתמש באובייקט emoji2-bundled
:
הכללת
emoji2-bundled
ו-emoji2
פריטי מידע שנוצרו בתהליך הפיתוח (Artifact):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
. מוודאים שמחרוזת הבדיקה מוצגת בצורה נכונה.- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ❄️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
ההשפעה של הגדרה אוטומטית של EmojiCompat
המערכת מחילה את הגדרות ברירת המחדל באמצעות ספריית ההפעלה, EmojiCompatInitializer
ו-DefaultEmojiCompatConfig
.
אחרי שהפעילות הראשונה באפליקציה ממשיכה, ה-initializer מתזמן את הטעינה של גופן האמוג'י. העיכוב הקצר הזה מאפשר לאפליקציה להציג את התוכן הראשוני שלה ללא זמן אחזור פוטנציאלי בגלל טעינה של גופן בשרשור רקע.
DefaultEmojiCompatConfig
מחפש ספק גופנים שניתן להורדה ומוטמע במערכת, שמטמיע את הממשק EmojiCompat
, כמו שירותי Google Play. במכשירים שמופעלים על ידי Google Play Services, הגופן נטען באמצעות Google Play Services.
ה-initializer יוצר שרשור רקע כדי לטעון את גופן האמוג'י, וההורדה של הגופן עשויה להימשך עד 10 שניות לפני שהזמן יפוג. אחרי שהגופן יורד, נדרש כ-150 אלפיות השנייה בשרשור רקע כדי לאתחל את EmojiCompat
.
עיכוב של האתחול של EmojiCompat
, גם אם משביתים את EmojiCompatInitializer
. אם מגדירים את EmojiCompat
באופן ידני, צריך להפעיל את EmojiCompat.load()
אחרי שהמסך הראשון של האפליקציה מוצג, כדי למנוע תחרות ברקע עם טעינת המסך הראשון.
אחרי הטעינה, EmojiCompat
משתמש בכ-300KB של זיכרון RAM כדי לאחסן את המטא-נתונים של האמוג'י.