码迷,mamicode.com
首页 > 其他好文 > 详细

表情的发送,展示,粘贴与删除

时间:2015-01-05 00:34:44      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:arjinmc   csg   android   表情   

最近我也在做插入表情的功能,网上有很多关于表情的使用的资料,但是大部分资料都是缺胳膊少腿的。参考了网上的一些例子,我做了一个比较完善的demo分享给大家,当然这个demo也存在一些优化问题,有兴趣的人继续优化它。我已经把项目源代码开源在我的github上,https://github.com/arjinmc/FaceDemo

网上很多例子是以数组的形式去存储我们的表情键值对,但是实际项目中并不会用这种模式,因为这种模式扩展性太差。于是我用的是文件的模式去存取,依然是类似简直对应的关系去存取:[表情字符]===图片名称。

做这个功能还有两个重要的控件,必须重写。如果不重写的话,需要写大量的代码,分别对TextView和EditText重写。

在TextView中主要重写setText()

@Override
   publicvoidsetText(CharSequence text, BufferType type){
       SpannableString spannableString = new SpannableString(text);
       spannableString = FaceUtil.getExpressionString(getContext(),spannableString.toString());
        super.setText(spannableString, type);
}

这个是用来展示表情的主要代码,同样在EditText中也需要重写这个方法,代码雷同。初次之外还需要重写一个对文本的粘贴的动作监听,从而可以做到粘贴表情。

 @Override
   publicbooleanonTextContextMenuItem(int id) {
          if (id == android.R.id.paste) {
               ClipboardManagerclipboard= (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
                String value = clipboard.getText().toString();
                Editable edit = getEditableText();
                int cursorSelect = getSelectionStart();
                edit.insert(cursorSelect, FaceUtil.getExpressionString(getContext(),value));
                return true;
          }
          return super.onTextContextMenuItem(id);
}

还有就是删除表情,在很多大牌应用中,删除表情的按钮通常都会放在表情堆里面,这个删除按键还可以充当软键盘的删除键,也就是既可以删除单个字符也可以删除单个表情。我是这样写的。

/**
     * @usage删除editetext上的字符串或者表情
     * @author eminem
     * @email eminem@hicsg.com
     * @website arjinmc.com
     * @create 2014年12月26日
     */
    private void deleOneString(){
       int edittextCursor = edittext.getSelectionStart();
       Editableeditable= edittext.getText(); 
       StringtempString= edittext.getText().toString().substring(0,edittextCursor);
       int end = tempString.lastIndexOf("]");
       if(end==edittextCursor-1){
           int start = tempString.lastIndexOf("[");
           if(start!=-1){
              editable.delete(start, edittextCursor);
           }else if(edittextCursor!=0){
              editable.delete(edittextCursor-1, edittextCursor);
           }
       }else if(edittextCursor!=0){
           editable.delete(edittextCursor-1, edittextCursor);
       }
    }

 

还有一个重点,怎么去判断是选取了表情还是点击了删除键。我会给删除键定义一个常量用来表示是这个是删除,当点击表情的事件触发的时候,我使用了handler去传递这个消息,当界面接收到这个消息的时候,则对其相应处理。代码在github上面很完整,有兴趣可以下载来看看。

arjinmc@hotmail.com 这个邮箱还会继续用,随便给我发哪个。欢迎骚扰。

表情的发送,展示,粘贴与删除

标签:arjinmc   csg   android   表情   

原文地址:http://blog.csdn.net/arjinmc/article/details/42408151

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!