最新の絵文字のサポート

標準の絵文字セットは毎年更新され、 Unicode(絵文字の使用が増えているため) 迅速に構築できます。

アプリがインターネット コンテンツを表示する場合やテキスト入力を提供する場合は、 最新の絵文字フォントをサポートすることをおすすめします後で絵文字を入力すると、 小さな四角いボックス(豆腐(🛍?)など)として表示されているか、その他正しくレンダリングされていない 使用できます。

Android バージョン 11(API レベル 30)以前では絵文字フォントを更新できないため、 これらのバージョンでこれらのバージョンを表示するアプリは、手動で更新する必要があります。

以下に、最新の絵文字の例を示します。

バージョン
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0(2021 年 9 月)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1(2020 年 9 月)
🥲 🥷🏿 🐻‍❄️ 13.0(2020 年 3 月)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1(2019 年 10 月)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0(2019 年 2 月)

androidx.emoji2:emoji2 ライブラリは、以前のバージョンの Android とのシンプルな下位互換性を備えています。emoji2 ライブラリは、 AppCompat ライブラリであり、 追加の設定が必要です

Compose での絵文字のサポート

2023 年 3 月の BOMCompose UI 1.4)で最新の絵文字をサポート すべてのバージョンのサポートを含め、以前のバージョンの Android との下位互換性 API 21。このページでは、View システムで最新の絵文字を構成する方法について説明します。詳しくは、 詳しくは、Compose 内の絵文字のページをご覧ください。

前提条件

アプリが新しい絵文字を適切に表示していることを確認するには、デバイスでその絵文字を起動します。 Android 10(API レベル 29)以前を搭載している。このページには、あなたにおすすめの テストに使用できます。

AppCompat を使用して最新の絵文字をサポートする

AppCompat 1.4 では絵文字がサポートされています。

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 開発者サービスを利用します。

アプリが AppCompat を使用しているにもかかわらず、豆腐(☐)が表示される場合

場合によっては、正しい絵文字の代わりに豆腐がアプリで表示され、 AppCompat ライブラリを追加します。考えられる原因は次のとおりです。 説明します。

最近フラッシュしたデバイスまたは新しいエミュレータでアプリを実行している

フォントのキャッシュを削除するため、アプリの Google Play 開発者サービスのデータを消去します。 発生します。通常、問題は数時間後に解決します。

アプリデータを消去する手順は次のとおりです。

  1. Android デバイスで [設定] を開きます。

  2. [アプリと通知] をタップします。

  3. [アプリをすべて表示] または [アプリ情報] をタップします。

  4. アプリをスクロールして [Google Play 開発者サービス] をタップします。

  5. [ストレージとキャッシュ] をタップします。

  6. [キャッシュを消去] をタップします。

アプリが AppCompat のテキスト関連クラスを使用していない

これは、AppCompatActivity を拡張しない場合や、 コード内でのビュー(TextView など)。次の点を確認してください。

XML をインフレートする場合、AppCompatActivity は自動的に TextView の代わりに AppCompatTextView をインフレートするので、XML を更新する必要はありません。

テスト用のスマートフォンがダウンロード可能なフォントをサポートしていない

DefaultEmojiCompatConfig.create が null でない構成を返すことを確認してください。

以前の API レベルのエミュレータで Google Play 開発者サービスがアップグレードされていない

以前の API レベルでエミュレータを使用する場合、 フォント プロバイダを見つけるために、emoji2 用の Google Play 開発者サービスがバンドルされています。そのためには、 エミュレータで Google Play ストアにログインします。

互換性のあるバージョンがインストールされていることを確認するには、次のようにします。

  1. 次のコマンドを実行します。

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. versionCode211200000 より大きいことを確認します。

AppCompat なしで絵文字をサポートする

アプリに AppCompat を含めることができない場合は、emoji2 を直接使用できます。この 追加の作業が必要になるため、アプリで AppCompat を使用できない場合にのみ、この方法を使用してください。

AppCompat ライブラリなしで絵文字をサポートする手順は次のとおりです。

  1. アプリの build.gradle ファイルに emoji2emoji2-views を組み込みます。

    build.gradle
    
    def emojiVersion = "1.0.0-alpha03"
    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-views:$emojiVersion"
    

    emoji2-views モジュールは、 次のサブクラス 実装する TextViewButtonEditText EmojiCompat。使用しない AppCompat を含むアプリで(すでに実装されているため) EmojiCompat

  2. XML とコードの場合 - TextViewEditText、または 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 を使用する

EmojiCompatEmojiSpan を使用して以下を行います。 正しい画像をレンダリングしますそのため、モデルは、ある種の関数を CharSequence オブジェクトを EmojiSpan オブジェクトを含む Spanned オブジェクト。 EmojiCompat クラスは、CharSequencesSpanned インスタンスに変換する process() メソッドを提供します。このメソッドを使用すると、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 を受け取ります。 の絵文字を返します。EmojiCompat が絵文字を検出してレンダリングできる場合は true を返します。

また、キーボードは、アプリがサポートする 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 を使用しないアプリでカスタムビューをサポートする手順は次のとおりです。

  1. emoji2-views-helper ライブラリを追加します。

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. 手順に沿って追加します。 EmojiTextViewHelper または EmojiEditTextHelper 最大 50%削減できます

  3. Android 10 搭載デバイスでアプリを起動して統合をテストする 次のテスト文字列が表示されます。すべての文字が 確認します

    • 14.0: 🫠、🫱🏼‍🫲🏿、🫰🏽
    • 13.1: 😶‍🌫️、🧔🏻‍♀️、🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲、🥷🏿、🐻‍❄️
    • 12.1: 🧑🏻‍🦰、🧑🏿‍🦯、👩🏻‍🤝‍👩🏼
    • 12.0: 🦩、🦻🏿、👩🏼‍🤝‍👩🏻
で確認できます。

emoji2 処理のオプション機能

アプリに emoji2 ライブラリを追加したら、オプションの 機能が含まれています。

別のフォントまたはダウンロード可能なフォントのプロバイダを使用するように emoji2 を構成する

別のフォントまたはダウンロード可能なフォントのプロバイダを使用するように 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 の動作を変更する

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 に設定すると、EmojiCompatEmojiSpan のバックグラウンドを描画します。このメソッドは主にデバッグ目的で使用します。
  • setEmojiSpanIndicatorColor: EmojiSpan を示す色を設定します。デフォルト値は GREEN
  • registerInitCallback(): EmojiCompat の初期化の状態をアプリに通知します。

初期化リスナーを追加する

EmojiCompat クラスと EmojiCompat.Config クラスは、 registerInitCallback() および unregisterInitCallback() 初期化コールバックの登録と登録解除を行うためのメソッドが用意されています。お客様のアプリで使用されている機能 EmojiCompat が初期化されるまで待機してから絵文字を処理するコールバック ビューに表示されます。

これらのメソッドを使用するには、EmojiCompat.InitCallback クラスのインスタンスを作成します。これらのメソッドを呼び出して、EmojiCompat.InitCallback クラスのインスタンスを渡します。初期化が成功すると、EmojiCompat クラスは onInitialized() メソッドを呼び出します。ライブラリの初期化に失敗した場合、EmojiCompat クラスは onFailed() メソッドを呼び出します。

初期化状態を任意の時点で確認するには、 getLoadState() メソッドを呼び出します。このメソッドは次のいずれかの値を返します。 LOAD_STATE_LOADING LOAD_STATE_SUCCEEDED, または LOAD_STATE_FAILED

emoji2 がバンドルされたフォントのサポート

emoji2-bundled アーティファクトを使用すると、絵文字フォントをアプリにバンドルできます。 ただし、NotoColorEmoji フォントは 10 MB を超えているため、 可能な限りダウンロード可能なフォントを使うことを 推奨しますemoji2-bundled アーティファクトは、 ダウンロード可能フォントも用意しました

emoji2-bundled アーティファクトを使用する手順は次のとおりです。

  1. emoji2-bundled アーティファクトと emoji2 アーティファクトを含めます。

    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. 上記の手順で統合をテストします。 emojicompatAppCompat の有無は問わない)。テスト文字列が 表示されます。

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

EmojiCompat 自動構成の影響

システムは、スタートアップ ライブラリを使用してデフォルト構成を適用します。 EmojiCompatInitializer、および DefaultEmojiCompatConfig

アプリでの最初のアクティビティが再開されると、イニシャライザは絵文字のスケジュールを設定します あります。このわずかな遅延により、アプリは最初のコンテンツを通知なしで表示し、 バックグラウンド スレッドでのフォントの読み込みによる潜在的なレイテンシ。

DefaultEmojiCompatConfig が、システムにインストールされているダウンロード可能フォントを検索します EmojiCompat インターフェースを実装するプロバイダ(Google Play など) 提供します。Google Play 開発者サービスを備えたデバイスでは、Google Play 開発者サービスを使用してフォントが読み込まれます。

イニシャライザは、絵文字フォントを読み込むためのバックグラウンド スレッドと、 ダウンロードがタイムアウトするまで 10 秒ほどかかることがあります。フォントがダウンロードされた後、バックグラウンド スレッドで EmojiCompat を初期化するのに約 150 ミリ秒かかります。

EmojiCompatInitializer を無効にした場合でも、EmojiCompat の初期化を遅延してください。手動で構成する EmojiCompat、表示されたら EmojiCompat.load() を呼び出します。 競合を回避するために、アプリの最初の画面と 画面の読み込み時間だけです

読み込み後、EmojiCompat は絵文字を保持するために約 300 KB の RAM を使用します 提供します。