Android表情功能

Android表情功能

標籤(空格分隔): 未分類android


轉載自:android edittext插入表情(基於socket方式),並對文中不正確的內容進行整理和修正socket

涉及知識點:oop

一、在EditText光標處插入一個表情

ImageGetter imageGetter = new ImageGetter() {
    public Drawable getDrawable(String source) {
        int id = Integer.parseInt(source);
        Drawable d = getResources().getDrawable(id);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        return d;
    }
};
// 咱們先實例化一個ImageGetter,ImageGetter是什麼你們本身查查,
// 這裏能夠理解爲經過它能夠把edittext裏面的html標籤替換爲圖片的一個方法
// 而後經過Html.fromHtml把它轉換成文本格式
// Emoji.DATA[position]的意思是從表情ID集合(Emoji.DATA)中取得第position個元素
CharSequence cs = Html.fromHtml("<img src='" + Emoji.DATA[position]+ "'/>", imageGetter, null);
// 在光標處插入一個表情符
editText.getText().insert(editText.getSelectionStart(), cs);
Log.i(TAG, "內容:" + filterHtml(Html.toHtml(editText.getText())));

二、過濾EditText的內容

如今要是你打印出EditTexttext裏面確定有個OBJ的小圖標,咱們發出去後也是顯示那個樣子,咱們是要經過socket發出去的,因此咱們不能直接發送editText.getText()的值,這時候咱們須要用一個方法過濾一下才能發,咱們還須要一個方法 以下:編碼

public static String filterHtml(String str) {
    str = str.replaceAll("<(?!br|img)[^>]+>", "").trim();
    return unicodeToGBK2(str);
}

這就是把ediTtext的內容過濾,除了<br>標籤和<img>標籤,其餘都去掉後的內容,如今就能夠發送啦。注意:有些可能發送後就會出現#&62137;這樣編碼的內容(中文),須要再轉碼一下,轉碼的方法也給你們貼上 以下:.net

public static String unicodeToGBK2(String s) {
    String[] k = s.split(";");
    String rs = "";
    for (int i = 0; i < k.length; i++) {
        int strIndex = k[i].indexOf("&#");
        String newstr = k[i];
        if (strIndex > -1) {
            String kstr = "";
            if (strIndex > 0) {
                kstr = newstr.substring(0, strIndex);
                rs += kstr;
                newstr = newstr.substring(strIndex);
            }
            int m = Integer.parseInt(newstr.replace("&#", ""));
            char c = (char) m;
            rs += c;
        } else {
            rs += k[i];
        }
    }
    return rs;
}

三、顯示從服務端返回的帶有表情的內容

ImageGetter imageGetter = new ImageGetter() {
    public Drawable getDrawable(String source) {
        int id = Integer.parseInt(source);
        Drawable d = getResources().getDrawable(id);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        return d;
    }
};

String serverText = ;// serverText 來自服務端返回
editText2.setText(Html.fromHtml(serverText,imageGetter,null));
相關文章
相關標籤/搜索