18

AndroidTextViewで絵文字アイコンを表示するのに問題があります

まず、ここでユニコードの絵文字アイコンのリストを見つけました: http ://www.easyapns.com/category/just-for-fun

次に、絵文字アイコンを表示する方法をここで見つけました: https ://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

EmojiTextView.javaは、事前定義された文字を絵文字アイコンに自動的に変換できます。したがって、文字列内に出現するすべての絵文字アイコンを事前定義された文字に置き換え、その結果をEmojiTextView.javaに配置します。問題は、コードが絵文字アイコンを含む文字列内の絵文字アイコンを認識できないことです。

これが私のコードスニペットです-入力が絵文字アイコンのユニコードと一致するかどうかを見つけようとしています:

// Array list of all emoji icon
private static final String[] ArrayEUnicodeString ={
    "\uE415",
    "\uE056",
    "\uE057",
    ...
}

// Nothing matched when it receive emoji icon with unicode "\uE415" from iphone. 'input' is message received from XMPP server
for (int i=0; i < emojiLength; i++)
{

    if (input.getBytes() == ArrayEUnicodeString[i].getBytes())
        Log.e("test", "ArrayEUnicodeString found");
}
// Note: iphone can display the emoji icon if I send "\uE415"

私はユニコードの比較/慣習が得意ではありません。誰か助けてくれませんか、ありがとう!

4

4 に答える 4

6

保護されたApple絵文字画像をアプリケーションに埋め込みたいのはなぜですか?

EditTextUnicode標準には722の絵文字が含まれており、フィールドまたはにUnicode文字を入力するだけでAndroidのデフォルトフォントで表示できますTextView

さらに、次のライブラリ(フォルダ「Java」内)を使用して、人気のある絵文字:-)を対応するUnicode絵文字に自動的に変換できます。

https://github.com/delight-im/Emoji

于 2014-03-19T00:26:58.367 に答える
6

ここで、以下の解決策を実行してください:

問題:絵文字ではなくTextView内に、文字列\ ue415 \ ue056\ue057が表示されています。

根本的な原因: JavaまたはAndroidでは、プログラムで絵文字の文字列表現を\\ ue415 \\ ue056\\ue057として取得します。ただし、コンソールまたはLogCatで同じ文字列を印刷しようとすると、エスケープ文字が削除され、\ ue415 \ ue056 \ ue057として文字列が取得されます。これは、この問題の根本的な原因を検出できないためです。

解決策:この問題を解決するには、エスケープ文字を処理する必要があります。この問題を解決する方法を以下に作成しました。

public static String getEmojiFromString(String emojiString) {

    if (!emojiString.contains("\\u")) {

        return emojiString;
    }
    String emojiEncodedString = "";

    int position = emojiString.indexOf("\\u");

    while (position != -1) {

        if (position != 0) {
            emojiEncodedString += emojiString.substring(0, position);
        }

        String token = emojiString.substring(position + 2, position + 6);
        emojiString = emojiString.substring(position + 6);
        emojiEncodedString += (char) Integer.parseInt(token, 16);
        position = emojiString.indexOf("\\u");
    }
    emojiEncodedString += emojiString;

    return emojiEncodedString;
}    
于 2017-08-27T12:22:29.707 に答える
4

文字列をchar配列に変換し、次のように各charをチェックすると、正常に機能します。

StringBuilder sb = new StringBuilder();
for (char curr : str.toCharArray()) {
    sb.append((SUPPORTED_EMOJI_SET.contains(curr)) ? convertCharToImgTag(curr) : curr);
}

ここで、SUPPORTED_EMOJI_SETは単なる文字のセットです。次に例を示します。

new HashSet<Character>() {{
    add('\ue415');
    add('\ue056');
    ...
}}

正規表現を使用してこれを行うこともできますが、上記の方が高速になると思います。

于 2012-07-03T17:52:07.957 に答える
2

バイトを比較する代わりに、正規表現「[\ ue415 \ ue056\ue057]」を使用して絵文字を検索することもできます。

于 2012-07-01T01:29:30.593 に答える