zoukankan      html  css  js  c++  java
  • 表情复制粘贴

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

  • 相关阅读:
    [设计模式整理笔记 五] 创建者模式(Builder)
    ArrayList与List<T>笔记
    asp.net站点URLRewrite小记
    ArrayList Array List<T>性能比较
    C# Socket SSL通讯笔记
    [设计模式整理笔记 六] 工厂模式与创建者模式总结
    [设计模式整理笔记 七] 原型模式(ProtoType)
    实现页面提交时显示"正在处理.."
    [设计模式整理笔记 四] 抽象工厂模式(Abstract Factory)
    在 ASP.NET 中执行 URL 重写 [转MSDN]
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/4239744.html
Copyright © 2011-2022 走看看