表情复制粘贴

package com.syswin.toon.view;

import android.content.ClipboardManager;
import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.util.AttributeSet;
import android.widget.EditText;

import com.syswin.toon.view.emoji.EmojiUtils;

/**
 * 聊天自定义EditText
 * Created by Administrator on 2015/1/21.
 */
public class ChatEditText extends EditText{
    public ChatEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ChatEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ChatEditText(Context context) {
        super(context);
    }

    @Override
    public boolean onTextContextMenuItem(int id) {

        switch (id) {
            case android.R.id.paste:
                ClipboardManager clip = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
                int index = getSelectionStart();// 光标所在位置
                String value = clip.getText().toString();
                clip.setText("");
                Editable edit = getEditableText();// 获取EditableText
                SpannableString spannableString = null;
                String zhengze = "\\[[^\\[\\]]{1,3}\\]"; // 正则表达式,用来判断消息内是否有表情
                try {
                    spannableString = EmojiUtils.getExpressionString(getContext(),
                            value, zhengze, 0.7f, false);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if(spannableString == null){
                    edit.insert(index, "表情匹配错误");//把转换后的CharSequence插入到光标所在位置
                }else{
                    edit.insert(index, spannableString);//把转换后的CharSequence插入到光标所在位置
                }

                //do something
                break;

            default:
                break;
        }

        return super.onTextContextMenuItem(id);
    }
}

复写EditText 从而实现EditText中粘贴事件处理,从而将匹配符替换为表情

时间: 2024-08-26 12:21:28

表情复制粘贴的相关文章

xshell复制粘贴

用户看到这个标题肯定会觉得小编脑子坏掉了,复制粘贴不就是Ctrl+C,Ctrl+V嘛,但是在xshell却不尽然. 现象: 在xshell界面中需要用到之前的一段代码,自然是选中,熟练的键入Ctrl+C,打算复制,可是再次键入Ctrl+V时,一点反应都没有,无论怎样尝试都是一样. 原因分析: 在xshell中,Ctrl+C 代表着中断当前指令,与WIndows中的复制的快捷键重复,所以才出现了上述的现象 解决方法 1. 使用xshell中的复制粘贴快捷键 复制:Ctrl+Insert 粘贴:Sh

Vim 安装、配置及复制粘贴操作

1.安装:sudo apt-get install vim 2.配置:cd ~ #进入用户主目录 touch .vimrc #.后缀文件不可见 vi .vimrc #打开文件 输入: 1 set cindent 2 3 set shiftwidth=4 4 set tabstop=4 5 set softtabstop=4 6 7 set number 8 set hlsearch 9 syntax on 10 11 set showmode 12 set foldmethod=syntax 1

仿复制粘贴功能,长按弹出tips的实现

方案分析: 方案一:监听长按事件弹出PopupWindow[可行,缺点布局是固定的,小语种下会出现菜单截断现象] 方案二:弹出ContextMenu[不可行,因为ContextMenu的菜单是上下排列] 方案三:通过hierarchyviewer.bat查看可知,Editor的复制粘贴功能用的是toolbar,利用此功能也可实现[可行,代码量大] 方案四:通过查看Editor源码分析可知,只需要实现ActionMode.CallBack2接口,setMode即可实现[可行,简单实现接口,再添加少

《移动医疗:智能化医疗时代的来临》:2014年的旧书了,以网上可见的资料的复制粘贴为主。二星

本书中文版比较新,但是是从2014年的一本英文书翻译过来的.从时间上来说,过去的这两年移动医疗行业发生了比较大的变化,这本书已经过时了. 除此之外,本书以互联网上公开可见的资料的复制粘贴为主,作者缺乏对这个行业的深入了解,书中缺乏作者对资料的概括分析总结. 总体评价为二星.

ueditor编辑文章时候,复制粘贴内容,原来的图片不能显示

ueditor编辑文章时候.当现有文章有图片的时候, 再复制粘贴文本进去的时候.里面的图片就不能显示了, 编辑器查看文章Html代码,图片路径显示为:src="http://localhost/images/net/error!" 正确是:src="http://localhost/images/adc.jpg" 而我用的是自己定义的server的一个路径 查看源代码,发现这块功能是例如以下流程 当粘贴后.UE会将眼下编辑的全部内容中元素又一次赋值属性,即源代码中的

在LINUX终端和VIM下复制粘贴

http://www.tinylab.org/linux-terminal-and-paste-copy-under-vim/ 在GUI界面下,我们可以很自由的复制粘贴.但是在字符界面下,我们不得不用鼠标选定,然后单击右健,选择复制,再到别处去Ctrl-v.并且对于 那些用没有配置过的VIM来说,VIM的粘贴板和X Window的粘贴板还不共享.这在码字的过程中,感觉非常不流畅.下面,我们就尝试解决这个问题. 首先我们得让VIM和X Window共享一个粘贴板,这样我们就可以像在GUI界面下一样

【vim小小记】vim的复制粘贴(包括系统剪贴板)

1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只是方向不同,比如: w 跳转到下个word,W:跳转到上个word f 某行正向查找并跳转 F: 反向.... 然后部分双写的字母有行操作: yy 复制一行 dd 删除一行 所以, p就是在当前光标后粘贴,P就是在当前光标前粘贴 另外,说完p,其实还有几个命令有时也是很有用的 gp,和p的功能基本一

Android中的复制粘贴

The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的剪贴板里. clip object可以有三种形式: Text:文字字符串. 文字是直接放在clip对象中,然后放在剪贴板里:粘贴这个字符串的时候直接从剪贴板拿到这个对象,把字符串放入你的应用存储中. URI:一个Uri 对象. 表示任何形式的URI.这种形式主要用于从一个content provider中复制复杂的数据. 复制

[Android]通过ClipboardManager, ClipData进行复制粘贴[转]

Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴) Android Developer: 在开发一些系统应用的时候,我们会用到Android的剪贴板功能,比如将文本文件.或者其他格式的内容复制到剪贴板或者从剪贴板获取数据等操作.Android平台中每个常规的应用运行在自己的进程空间中,相对于Win32而言Android上之间的进程间传递主要有IPC.剪切板.当然今天我们说下最简单的ClipboardManager.使用剪切板可以直接实现数据的传输.整