תמיכה בסמלי אמוג'י מודרניים

הקבוצה הרגילה של סמלי האמוג'י מתעדכן מדי שנה על ידי Unicode, ככל שהשימוש באמוג'י הולך וגדל במהירות לכל סוגי האפליקציות.

אם האפליקציה שלך מציגה תוכן באינטרנט או מספקת קלט טקסט, אנחנו מאוד ממליצים מומלץ לתמוך בגופנים העדכניים ביותר של האמוג'י. אחרת, יכול להיות שאמוג'י מאוחר יותר יהיה מוצגת כמו תיבה ריבועית קטנה בשם tofu (☐) או אחרת שעברה עיבוד שגוי רצפי אמוג'י.

אי אפשר לעדכן את גופן האמוג'י במכשירים עם 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 לתמיכה באמוג'י העדכני ביותר

1.4 AppCompat כולל תמיכה באמוג'י.

כדי להשתמש בסמל AppCompat לתמיכה באמוג'י, צריך לבצע את הפעולות הבאות:

  1. צריך לבדוק שהמודול תלוי בגרסה של הספרייה AppCompat 1.4.0-alpha01 או גבוהה יותר.

    build.gradle
    
    // Ensure version is 1.4.0-alpha01 or higher.
    implementation "androidx.appcompat:appcompat.$appcompatVersion"
    
  2. מוודאים שכל הפעילויות שמציגות טקסט מרחיבות את AppCompatActivity בכיתה.

    Kotlin

    MyActivity.kt
    
    class MyActivity: AppCompatActivity {
    ...
    }
    

    Java

    MyActivity.java
    
    class MyActivity extends AppCompatActivity {
    ...
    }
    
  3. כדי לבדוק את השילוב, צריך להפעיל את האפליקציה במכשיר עם Android 10 או נמוכה יותר, והצגת מחרוזת הבדיקה הבאה. יש לוודא שכל התווים מעובדים בצורה נכונה.

    • 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 ❄️
    • 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯, 👩🏻 🤝 👩🏻 🦰, 🧑🏿
    • 12.0: 🦩, 🦻🏿, 👩 🤝 👩🏻

האפליקציה מציגה באופן אוטומטי סמלי אמוג'י שתואמים לאחור בכל המכשירים צריך לספק ספק גופנים תואם ל-emoji2, כמו מכשירים מופעל על ידי Google Play Services.

אם באפליקציה נעשה שימוש ב-AppCompat אבל מוצג בה הערך של tofu (☐)

במקרים מסוימים, האפליקציה עשויה להציג טופו במקום את האמוג'י הנכון, גם אם שמוסיפים את הספרייה AppCompat. הנה הסברים אפשריים ולבסוף על solutions.

האפליקציה מופעלת במכשיר שבהבה לאחרונה או באמולטור חדש

ניקוי נתוני האפליקציה של Google Play Services כדי לנקות שמירת גופנים במטמון במהלך ההפעלה. בדרך כלל הבעיה נפתרת לאחר מספר שעות.

כדי לנקות את נתוני האפליקציה:

  1. פותחים את ההגדרות במכשיר Android.

  2. מקישים על אפליקציות והתראות.

  3. מקישים על הצגת כל האפליקציות או על פרטי אפליקציות.

  4. גוללים בין האפליקציות ומקישים על Google Play Services.

  5. מקישים על אחסון ו מטמון.

  6. מקישים על ניקוי המטמון.

באפליקציה שלך לא נעשה שימוש בכיתה שקשורה לטקסט ב-AppCompat

זה יכול לקרות אם לא מרחיבים את AppCompatActivity או אם יוצרים בקוד, כמו TextView. צריך לבדוק את הדברים הבאים:

AppCompatActivity מגדילה את AppCompatTextView באופן אוטומטי במקום TextView כשמנפחים את ה-XML, כך שאין צורך לעדכן את ה-XML.

טלפון הבדיקה לא תומך בגופנים שניתן להוריד

צריך לוודא ש-DefaultEmojiCompatConfig.create מחזירה הגדרה שאינה null.

אמולטור ברמת API קודמת לא שדרג את Google Play Services

כשמשתמשים באמולטור ברמת API קודמת, יכול להיות שתצטרכו לעדכן את בחבילה של Google Play Services עבור emoji2 כדי למצוא את ספק הגופנים. כדי לעשות את זה, מתחברים לחנות Google Play באמולטור.

כדי לוודא שמותקנת גרסה תואמת:

  1. מריצים את הפקודה הבאה:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. צריך לבדוק שהערך של versionCode גבוה מ-211200000.

תמיכה באמוג'י ללא AppCompat

אם האפליקציה לא יכולה לכלול את AppCompat, היא יכולה להשתמש ישירות ב-emoji2. הזה נדרשת עבודה נוספת, לכן כדאי להשתמש בשיטה הזו רק אם האפליקציה לא יכולה להשתמש ב-AppCompat.

כדי לתמוך באמוג'י בלי הספרייה AppCompat, צריך לבצע את הפעולות הבאות:

  1. בקובץ 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.

  2. ב-XML ובקוד – בכל מקום שבו משתמשים ב-TextView, ב-EditText או Button — שימוש EmojiTextView, EmojiEditText, או EmojiButton במקום זאת.

    activity_main.xml
    
    <androidx.emoji2.widget.EmojiTextView ... />
    <androidx.emoji2.widget.EmojiEditText ... />
    <androidx.emoji2.widget.EmojiButton ... />
    

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

  3. כדי לבדוק את השילוב, צריך להפעיל את האפליקציה במכשיר עם Android 11 או נמוכה יותר והצגת מחרוזות הבדיקה הבאות. יש לוודא שכל התווים מעובדים בצורה נכונה.

    • 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 ❄️
    • 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯, 👩🏻 🤝 👩🏻 🦰, 🧑🏿
    • 12.0: 🦩, 🦻🏿, 👩 🤝 👩🏻

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

EmojiCompat משתמש ב-EmojiSpan כדי לעבד תמונות נכונות. לכן היא צריכה להמיר כל אובייקט CharSequence לתוך אובייקט Spanned עם EmojiSpan אובייקטים. המחלקה אמוג'י מספקת את השיטה process() כדי להמיר את CharSequences ל-Spanned מופעים. בשיטה הזו אפשר לקרוא לפונקציה process() רקע ומטמון של התוצאות, מה שמשפר את ביצועי האפליקציה.

Kotlin

val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")

Java

CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");

שימוש ב-mojiCompat לעורכים של שיטות הקלט

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

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

  • EDITOR_INFO_METAVERSION_KEY: מייצג את גרסת המטא-נתונים של האמוג'י שהאפליקציה משתמשת בהם. אם המקש הזה לא קיים, סימן שהאפליקציה לא משתמשת ב-EmojiCompat.
  • EDITOR_INFO_REPLACE_ALL_KEY: אם המפתח קיים ומוגדר ל-true, האפליקציה מגדירה 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

  1. כדי להוסיף את הספרייה emoji2-views-helper:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. פועלים לפי ההוראות להכללה EmojiTextViewHelper או EmojiEditTextHelper בתצוגות המותאמות אישית של האפליקציה.

  3. כדי לבדוק את השילוב, צריך להפעיל את האפליקציה במכשיר עם Android 10 או נמוכה יותר, והצגת מחרוזת הבדיקה הבאה. יש לוודא שכל התווים מעובדים בצורה נכונה.

    • 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 ❄️
    • 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯, 👩🏻 🤝 👩🏻 🦰, 🧑🏿
    • 12.0: 🦩, 🦻🏿, 👩 🤝 👩🏻

תכונות אופציונליות לטיפול באמוג'י 2

אחרי שמוסיפים את ספריית emoji2 לאפליקציה, אפשר להוסיף את האפשרויות האופציונליות שמתוארים בקטע הזה.

הגדרת אמוג'י2 לשימוש בגופן אחר או בספק גופנים אחר להורדה

כדי להגדיר את emoji2 לשימוש בגופן אחר או בספק גופנים אחר להורדה, יש לבצע את הפעולות הבאות הבאים:

  1. להשבית את 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>
  2. מבצעים אחת מהפעולות הבאות:

    • שימוש בהגדרות ברירת המחדל באמצעות קריאה DefaultEmojiCompatConfiguration.create(context)

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

כדי להשתמש ב-methods האלה, יוצרים מופע של EmojiCompat.InitCallback בכיתה. קוראים ל-methods אלה ומעבירים (pass) במקרה כיתה אחת (EmojiCompat.InitCallback). כשהאתחול מוצלח, הפרמטר הכיתה EmojiCompat תקרא ל- onInitialized() . אם הספרייה לא תופעל, המחלקה EmojiCompat תקרא ל- onFailed() .

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

תמיכה בגופנים בחבילה עם אמוג'י2

אפשר להשתמש בארטיפקט emoji2-bundled כדי לצרף לאפליקציה גופן אמוג'י. עם זאת, מכיוון שהגופן NotoColorEmoji הוא מעל 10MB, אנחנו מאוד ממליצים תמליץ על השימוש בגופנים שניתן להוריד, כשהדבר אפשרי. פריט המידע שנוצר בתהליך הפיתוח (Artifact) של emoji2-bundled מיועד לאפליקציות במכשירים שלא תומכים גופנים שניתנים להורדה.

כדי להשתמש בארטיפקט emoji2-bundled, צריך לבצע את הפעולות הבאות:

  1. הכללת emoji2-bundled ו-emoji2 פריטי מידע שנוצרו בתהליך הפיתוח (Artifact):

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. מגדירים את emoji2 לשימוש בתצורה בחבילה:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
    
  3. מבצעים את השלבים הקודמים כדי לבדוק את השילוב. emojicompat עם או בלי AppCompat. צריך לוודא שמחרוזת הבדיקה מוצגת כמו שצריך.

    • 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 ❄️
    • 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏻 🤝 👩🏻 🦯, 👩🏻 🤝 👩🏻 🦰, 🧑🏿
    • 12.0: 🦩, 🦻🏿, 👩 🤝 👩🏻

ההשפעה של ההתאמה האוטומטית של האמוג'י

המערכת מחילה את הגדרות ברירת המחדל באמצעות ספריית ההפעלה, EmojiCompatInitializer, וגם DefaultEmojiCompatConfig.

אחרי שהפעילות הראשונה באפליקציה תתחדש, תוכנת ההפעלה תתזמן את האמוג'י. טעינת הגופן מתבצעת. העיכוב הקצר הזה מאפשר לאפליקציה להציג את התוכן הראשוני בלי זמן אחזור פוטנציאלי עקב טעינת גופן בשרשור ברקע.

האפליקציה DefaultEmojiCompatConfig מחפשת גופן להורדה שמותקן על ידי המערכת ספק שמטמיע את הממשק של EmojiCompat, למשל Google Play שירותים שונים. במכשירים שמופעלים על ידי Google Play Services, הגופן נטען באמצעות Google Play Services.

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

דחיית האתחול של EmojiCompat, גם אם משביתים את ההגדרה EmojiCompatInitializer. אם מגדירים באופן ידני EmojiCompat, התקשרות אל EmojiCompat.load() לאחר ההצגה במסך הראשון של האפליקציה כדי להימנע מתחרות ברקע עם טעינת המסך.

אחרי הטעינה, זיכרון ה-RAM של EmojiCompat יהיה בנפח של כ-300KB כדי לשמור את האמוג'י מטא-נתונים.