• 表情复制粘贴


    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
    输入法

  • 相关阅读:
    转!!javaMail使用网易163邮箱报535 Error: authentication failed
    银行卡验证(验证是否存在,卡号类型,归属行)
    Navicat已经成功连接,密码忘记的解决方法
    Inline&IAT Hook原理
    x64dbg尝鲜
    C# 通过Dynamic访问System.Text.Json对象
    dotnet5将asp.net webapi宿主到wpf
    Asp.Net5 MVC with Vue.js
    在 Visual Studio 中使用跟踪点将信息记录到“输出”窗口中
    WPF带阴影的无边框窗体
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/4239744.html
Copyright © 2020-2023  润新知