2012-03-16 39 views
14

Tôi có một số vấn đề với hiển thị biểu tượng cảm xúc trong Android TextViewhiển thị biểu tượng cảm xúc/cảm xúc trong Android TextView

Trước tiên, tôi tìm thấy một danh sách các biểu tượng cảm xúc trong unicode tại đây: http://www.easyapns.com/category/just-for-fun

Thứ hai, tôi thấy cách hiển thị biểu tượng cảm xúc tại đây: https://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

EmojiTextView.java có thể tự động chuyển đổi ký tự được xác định trước thành biểu tượng cảm xúc. Do đó, tôi muốn thay thế tất cả các lần xuất hiện của biểu tượng cảm xúc trong một Chuỗi thành một số ký tự được xác định trước và đặt kết quả vào EmojiTextView.java Vấn đề là mã của tôi không thể nhận dạng biểu tượng cảm xúc trong Chuỗi chứa biểu tượng cảm xúc.

Dưới đây là đoạn mã của tôi - Tôi cố gắng để tìm thấy nếu đầu vào phù hợp với bất kỳ unicode của biểu tượng cảm xúc:

// 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" 

Tôi không giỏi unicode so sánh/hội nghị. Ai đó có thể giúp tôi, cảm ơn!

+1

Nếu bạn dự định nhúng đồ họa biểu tượng cảm xúc iPhone vào ứng dụng của mình, hãy lưu ý rằng điều này là vi phạm bản quyền. Nó sẽ không làm tôi ngạc nhiên nếu bạn đã đi với nó (thị trường Android là đầy đủ các ứng dụng vi phạm bản quyền), nhưng bạn nên nhận thức được nó. – StilesCrisis

+0

Cảm ơn lời khuyên. Dù sao, bạn có biết làm thế nào để so sánh chuỗi đầu vào và chuỗi [] ArrayEUnicodeString? –

+0

@mobileappBạn có thể hiển thị \ ue415 trong android không? –

Trả lời

1

Bạn cũng có thể thử tìm biểu tượng cảm xúc bằng cụm từ thông dụng: "[\ ue415 \ ue056 \ ue057]", thay vì so sánh các byte.

4

Nó hoạt động tốt nếu bạn chuyển đổi chuỗi thành một mảng char và kiểm tra từng char, chẳng hạn như:

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

nơi SUPPORTED_EMOJI_SET chỉ là một tập hợp các ký tự, ví dụ:

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

Bạn cũng có thể làm điều này với một regex nhưng tôi tin rằng ở trên sẽ chạy nhanh hơn.

+1

@esilver bạn có thể vui lòng hướng dẫn tôi làm cách nào tôi có thể sử dụng biểu tượng cảm xúc trong ứng dụng Android của mình mà không vi phạm bất kỳ bản quyền nào. – ajay

5

Tại sao bạn muốn nhúng hình ảnh biểu tượng cảm xúc Apple được bảo vệ trong ứng dụng của bạn?

Tiêu chuẩn Unicode bao gồm 722 biểu tượng cảm xúc có thể được hiển thị bằng phông chữ mặc định của Android chỉ bằng cách nhập ký tự Unicode vào trường EditText hoặc TextView.

Bạn có thể, ngoài ra, sử dụng thư viện sau đây (trong thư mục "Java") để tự động chuyển đổi biểu tượng cảm xúc phổ biến như :-) vào biểu tượng cảm xúc Unicode tương ứng:

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

1

Ở đây, hãy đi qua bên dưới giải pháp:

vấn đề: Bên trong TextView thay vì Emoji, string \ ue415 \ ue056 \ ue057 được showin g.

Nguyên nhân: Trong java hoặc android, lập trình chuỗi đại diện của Emoji của bạn sẽ nhận được như \\ \\ ue415 ue056 \\ ue057. Nhưng khi bạn cố gắng in cùng một chuỗi trong giao diện điều khiển hoặc LogCat thì ký tự thoát được loại bỏ và bạn sẽ nhận được chuỗi là \ ue415 \ ue056 \ ue057 vì nguyên nhân gốc rễ của vấn đề này không thể phát hiện được.

Giải pháp: Để giải quyết vấn đề này, chúng tôi cần xử lý ký tự thoát. Tôi đã tạo ra phương pháp dưới đây để giải quyết vấn đề này.

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; 
}  
Các vấn đề liên quan