无名商城论坛

搜索
查看: 239|回复: 0

[其他技术] 【HR】android开发之表情包功能

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 15:29:56 | 显示全部楼层 |阅读模式

最近开发论坛练手时遇到了一个问题,怎么在EditText插入图片?CSDN上搜了下,终于解决了

1.利用Html

EditText view = findViewById(控件id);
        view.setText(Html.fromHtml("<img src=\"图片链接\"/>"));

这种方法坏处太多,就不多赘述了[狂汗]

2.利用SpannableString类

EditText view = findViewById(控件id);
        int index = view.getSelectionStart();//记录光标位置
        Editable edit = view.getEditableText();//获取edittext内容
        SpannableString ss = new SpannableString("[face1]");//将[face1]替换为图片
        Drawable d = getResources().getDrawable(图片id);
        d.setBounds(0, 0, 50, 50);//设置图片大小
        ImageSpan span = new ImageSpan(d,ImageSpan.ALIGN_BOTTOM);
        ss.setSpan(span, 0, ss.length(),
        if (index < 0 || index >= edit.length()) {
            edit.append(ss);//如果光标在内容后面就直接添加
        } else {
            edit.insert(index, ss);//反之则在光标位置插入
        }

这种方法用法很广,非常方便[滑稽]

3.开发表情功能

(1).插入表情(√)
(2).正则匹配表情符号并替换为图片显示在textview上(×)

正则的用法就去www.baidu.com上搜吧,这里不多讲[真棒]

Pattern pattern = Pattern.compile("\\[face([0-9]+)]");//匹配[face(0-9的一个或多个数字)],记得加转义符号\\
        Matcher match = pattern.matcher(需要匹配的内容);
        SpannableString ss = new SpannableString(需要匹配的内容);
        while (match.find()) {//一直匹配
            int number = Integer.parseInt(match.group(1)) - 1;//获取第一个括号里的数字,并转为int类型,为等下取数组图片做铺垫
            Drawable d = getResources().getDrawable(tp[number]);/*tp是一个int数组,数组里存的是图片id,例如
             private int[] tp = {
             R.drawable.face1,R.drawable.face2,R.drawable.face3,
             R.drawable.face4,R.drawable.face5,R.drawable.face6,
             R.drawable.face7,R.drawable.face8,R.drawable.face9,
             R.drawable.face10
             };
            */
                d.setBounds(0, 0, 50, 50);
                ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
                ss.setSpan(span, match.start(), match.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
               // match.start()匹配字符串下标(开始)
               // match.end()匹配字符串下标(结束)
            }
            view.setText(ss);//设置text

OK表情功能开发完成
注:非原创,搬砖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表