EditText和TextView上顯示錶情

轉載請註明本文出自woochen123的博客(http://blog.csdn.net/chewu1590/article/details/53141167),請尊重他人的辛勤勞動成果,謝謝!

當涉及聊天時,通常需要在EditText和TextView上顯示錶情,在這裏提供一種思路,希望對大家有所幫助。

首先上效果圖:

核心代碼:

將輸入框上的字符串替換成表情包中的內容

 /**
     * 將表情包使用SpannableStringBuilder包裝,並顯示到EditText中
     * @param enojiName 表情的名字([name]---將字符串中的圖片名字做過處理->[圖片名字]->爲了不產生奇怪的轉義)
     * @param j 在gridView中的索引值(emojiList中存儲表情圖片的id值)
     */
    private void putEmojiToEditText(String enojiName, int j) {
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(enojiName);
        //獲取表情的drawable
        Drawable drawable = mContext.getResources().getDrawable(emojiList.get(j));
        int size = (int) (35 * mContext.getResources().getDisplayMetrics().density);
        drawable.setBounds(0, 0, size, size);
        //將圖片使用ImageSpan包裝起來
        ImageSpan imageSpan = new ImageSpan(drawable);
        spannableStringBuilder.setSpan(imageSpan, 0, enojiName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        Editable editable = mMessageEditText.getText();
        int selectionEnd = mMessageEditText.getSelectionEnd();
        if (selectionEnd < editable.length()) {
            editable.insert(selectionEnd, spannableStringBuilder);
        } else {
            editable.append(spannableStringBuilder);
        }
    }
將TextView上的字符串替換成圖片:
/**
     * 將消息進行解析顯示到TextView中
     * @param s 消息的內容(有editText.getText().toString()得到)
     * @param mMessageTextView 用於顯示解析後消息的控件
     */
    private void parseMessage(String s, TextView mMessageTextView) {
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(s);
        Pattern pattern = Pattern.compile("\\[(\\S+?)\\]");//匹配[xx]的字符串
        Matcher matcher = pattern.matcher(s);
        while (matcher.find()) {
            int start = matcher.start();
            int end = matcher.end();
            String group = matcher.group();
            group = group.substring(1, group.length() - 1);
            Log.e("399", group);
            int drawableId = getResources().getIdentifier(group, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(drawableId);
            int size = (int) (35 * getResources().getDisplayMetrics().density);
            drawable.setBounds(0, 0, size, size);
            ImageSpan imageSpan = new ImageSpan(drawable);
            spannableStringBuilder.setSpan(imageSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        mMessageTextView.setText(spannableStringBuilder, TextView.BufferType.SPANNABLE);
   }

源碼就不發了,原理其實很簡單,大家就自己研究一下吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章