Android公式互換ライブラリEmojiCompat Support Library

11450 ワード

emojiとは?
Emojiは表情記号で、日本語の語彙「絵文字」(仮名は「えもじ」、読み方はemoji)から来ている.
その創造者は日本人の栗田穣崇(Shigtaka Kurita)で、日本の漫画や日本の漢字など、子供の頃の様々な要素に目を向けてインスピレーションを得た.「日本の漫画にはいろいろな記号があります.漫画家はいくつかの表情を描いて、汗をかいたり、考えが爆発したりしたときに頭に電球が現れたりします」.同時に、日本の漢字から「秘密」や「愛」などの抽象概念を簡単な文字で表現する能力を得た.
初期のemojiの表情には統一的な規範はなく、日本の3大電信事業者、NTTドコモ、au/KDDI、SoftbankにはそれぞれEmojiに関する符号化規範があり、事業者ユーザー間でemojiの表情を送信する際に表示できなかった.
2010年10月までUnicode 6.0のリリースにより、Emojiの符号化および対応する表情画像が正式に正規化され、コアEmojiの表情は722個のEmoji符号化を含む.
その後、2014年6月15日に発表されたUnicode 7.0規格と2016年6月22日に発表されたUnicode 9規格には、新しいemoji表情が続々と加わっており、現在、emoji表情全体が千以上に達している.
興味のある学生はここですべての表情に対応するコードを見ることができます.
Emoji表情リスト
Androidのemoji表情への互換性
多くの学生はAndroidデバイスのEmojiの表情に気づいていないかもしれません.
一般的に,我々が携帯電話で操作する場合,入力法で持参した表情やemoji表情を用いてこそテキストにemoji符号化が生じる.
Android 4.4以前は、Androidはemojiの表情をサポートしていなかったが、当時の解決策は主にimageSpanがspannablesStringに協力することで、文字の中のemoji unicode符号化記号を置き換えることだった.
Android 4.4から、公式にemoji表情のサポートが開始され、実現原理は基本的にemoji表情をシステムのttfフォントライブラリに内蔵し、テキストをフィルタリングしてemoji表情を表示することである.
Androidバージョンに内蔵されたttfフォントライブラリによってemojiの表情のバージョンがサポートされる程度が異なるため、古いバージョンのAndroidは最新のemojiの表情に対してサポートが不完全であるため、新しいunicodeバージョン仕様に組み込まれたemojiの表情は古いAndroidデバイスにブロック文字化けが表示されます.
この問題を処理するために,上述したspannableの処理スキームを除いて,独自のttfフォントライブラリを定義してテキスト空間にフォントを指定することでemoji表情を表示することもできる.
EmojiCompat Support Libraryの誕生
前述の互換性の問題からこそ、Google公式のEmojiCompat Support Libraryが誕生した.
現在、このライブラリはAndroid 4.4と下向きに互換性があり、その主な目標は私たちのAndroidデバイスが最新のemoji表情をサポートし、最新のemoji表情が私たちの携帯電話にχと表示されないようにすることです.
EmojiCompatはCharSequenceテキストのemojiに対応するunicode符号化によってemoji表情を認識し、それらをEmojiSpansに置き換え、最後にEmojiSpanを対応するemoji表情記号にレンダリングする.
EmojiCompatの使用には、次の2つの構成があります.
Downloadable fonts configuration
Downloadable fontsはAndroid Oの新しい機能で、google mobile serviceで必要なフォントライブラリをリモートでローカルに引き出して使用することをサポートしています.
国内ではGoogle Serviceが遮断されているため、この方式は国内では使用できません.ここでは詳しく紹介しません.
Bundled fonts configuration
Bundled fontsはフォントをパッケージ化し、ローカルでパッケージ化されたemojiフォントライブラリを使用してemoji表情を互換化します.
現在、公式に使用されているのはNotoColorEmojiCompat.ttfフォントファイルです.
EmojiCompatの使用
次にemojiCompatライブラリの使い方を見てみましょう
依存ライブラリの追加
まず私たちはbuildにいます.gradleでは依存パッケージを構成します.Bundled fontsの構成を使用しているので、emoji bundleライブラリを導入する必要があります.
dependencies {
    ...
    compile "com.android.support:support-emoji-bundled:$version"
}

ここで私の$version設定のバージョンは26.00-beta 1です.コンパイル中に依存ライブラリが見つからないとプロンプトされた場合、repositories倉庫構成にGoogleのmavenアドレスを追加する必要があります.
allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
    }
}

次に、EmojiCompatのコンポーネントライブラリを導入します.
dependencies {
    ...
    compile "com.android.support:support-emoji:26.0.0-beta1"
}

このコンポーネントライブラリに対応するemojiCompatコンポーネント:
.support.text.emoji.widget.EmojiTextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

.support.text.emoji.widget.EmojiEditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

.support.text.emoji.widget.EmojiButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

AppCompatライブラリを使用している場合は、emojiCompatのcompatコンポーネントライブラリを直接追加することもできます.
dependencies {
      compile "com.android.support:support-emoji-appcompat:26.0.0-beta1"
}

参照ライブラリに対応するコンポーネント:
.support.text.emoji.widget.EmojiAppCompatTextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

.support.text.emoji.widget.EmojiAppCompatEditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

.support.text.emoji.widget.EmojiAppCompatButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

compatライブラリと非compatライブラリの違いは,主に使用するコンポーネント名において,他の方式がほぼ一致することである.
EmojiCompatの初期化
EmojiCompatを正式に使用する前に初期化する必要があります
public class MyApplication extends Application {
@Override
    public void onCreate() {
       super.onCreate();
       EmojiCompat.Config config = new BundledEmojiCompatConfig(this);
       EmojiCompat.init(config);
    }
}

このとき、前のステップで追加したemojiCompatコンポーネントを使用して、既存のTextView、EditText、Buttonコンポーネントを置き換えることができます.テキストで対応するemoji表情コードに遭遇すると、自動的にemoji表情に置き換えられます.
コンポーネントを使用しないemojiCompat互換ライブラリ
EmojiCompatライブラリはEmojiSpanによって正しい表情画像をレンダリングするため、テキストCharSequenceをemoji符号化に従って対応するEmojiSpan Spannedインスタンスに変換する必要があります.
EmojiCompatは、CHarSequenceインスタンスの変換のためのプロセス()メソッドを専門に提供しています.
この方法では、元の文字列ではなく処理されたインスタンスをキャッシュし、使用する必要がある場所でインスタンスを直接呼び出して、アプリケーションのパフォーマンスを向上させることができます.
TextView regularTextView = findViewById(R.id.regular_text_view);

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

regularTextView.setText(processed);

カスタムEmojiCompatコンポーネント
EmojiCompatのprocessメソッドによるspannedインスタンスの変換に加えて、TextViewおよびEditTextViewコンポーネントは、公式に提供されている2つのwidget helperクラスを使用してカスタマイズできます.
android.support.text.emoji.widget.EmojiTextViewHelper android.support.text.emoji.widget.EmojiEditTextHelper
サンプルコード:
カスタムEmoji TextView
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() {
       ...
   }
}

カスタムEmoji EditText
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はAndroid 4.4以上のデバイスにのみ対応しており、4.4以下のデバイスでは、通常のAndroidコンポーネントと動作に差はありません.
EmojiCompatの初期化時間は約150ミリ秒で、メモリの消費量は約200 kbなので、安心して大胆に使用することができます.
ここは公式のDemoアドレスです.https://github.com/googlesamples/android-EmojiCompat
中にはdownloadable fontsの使用が含まれていますが、比較的完備しているので、自分のDemoは入れません.興味のある仲間は急いでダウンロードしてみましょう.