表情复制粘贴

复制代码
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中粘贴事件处理,从而将匹配符替换为表情

 

重写EditText的
public boolean onTextContextMenuItem(int id) {
return super.onTextContextMenuItem(id);
}
方法,根据id判断当前操作:
id:16908319
全选
id:16908328
选择
id:16908320
剪贴
id:16908321
复制
id:16908322
粘贴
id:16908324
输入法

posted @   似水流云  阅读(1187)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2014-01-21 Android 中HttpClient和HttpURLConnection选取
2013-01-21 如何在visio里设置java数据类型
2013-01-21 [图解]怎么查看Android工程的下的SDK源码
点击右上角即可分享
微信分享提示