android实现表情输入(极其简洁易懂)

来源:互联网 发布:电脑分辨率测试软件 编辑:程序博客网 时间:2024/04/30 11:08

效果:
emoji

demo下载:
android 发送表情 emoji - 下载频道 - CSDN.NET
http://download.csdn.net/detail/baidu_31093133/9782454

只要把emoji图片换成你自己的资源图片就可以使用了,代码很简洁。
图片解析类:

public class EmojiUtil {    /**     * 对spanableString进行正则判断,如果符合要求,则以表情图片代替     * @param context     * @param spannableString     * @param patten     * @param start     * @throws SecurityException     * @throws NoSuchFieldException     * @throws NumberFormatException     * @throws IllegalArgumentException     * @throws IllegalAccessException     */    public static void dealExpression(Context context,SpannableString spannableString, Pattern patten, int start) throws SecurityException, NoSuchFieldException, NumberFormatException, IllegalArgumentException, IllegalAccessException {        Matcher matcher = patten.matcher(spannableString);        while (matcher.find()) {            String key = matcher.group();            if (matcher.start() < start) {                continue;            }            Field field = R.drawable.class.getDeclaredField(key);            int resId = Integer.parseInt(field.get(null).toString());       //通过上面匹配得到的字符串来生成图片资源id            if (resId != 0) {                Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId);                bitmap = Bitmap.createScaledBitmap(bitmap, 60, 60, false);//设置表情大小                ImageSpan imageSpan = new ImageSpan(bitmap);                //通过图片资源id来得到bitmap,用一个ImageSpan来包装                int end = matcher.start() + key.length();                   //计算该图片名字的长度,也就是要替换的字符串的长度                spannableString.setSpan(imageSpan, matcher.start(), end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);   //将该图片替换字符串中规定的位置中                if (end < spannableString.length()) {                       //如果整个字符串还未验证完,则继续。。                    dealExpression(context,spannableString,  patten, end);                }                break;            }        }    }    /**     * 得到一个SpanableString对象,通过传入的字符串,并进行正则判断     * @param context     * @param str     * @return     */    public static SpannableString getExpressionString(Context context,String str,String zhengze){        SpannableString spannableString = new SpannableString(str);        Pattern sinaPatten = Pattern.compile(zhengze, Pattern.CASE_INSENSITIVE);        //通过传入的正则表达式来生成一个pattern        try {            dealExpression(context,spannableString, sinaPatten, 0);        } catch (Exception e) {            Log.e("dealExpression", e.getMessage());        }        return spannableString;    }}

解决表情框和软键盘冲突的问题:(demo中没有写)

        imgEmoji.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                if (gridView.getVisibility() == View.VISIBLE) {//如果表情框可见                    gridView.setVisibility(View.GONE);//隐藏                    //设置软键盘可以顶出布局                    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);                } else {//如果表情框隐藏                    gridView.setVisibility(View.VISIBLE);//可见                    //隐藏软键盘,同时社会软键盘为遮挡模式                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                    imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);                    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);                }            }        });
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 床上老是有小蜈蚣怎么办 早晚出去胳膊脚觉得凉怎么办 腿凉感觉冒凉气怎么办 冬天腿被冻夏天发酸发凉怎么办 宿舍一楼虫子多怎么办 有虫子在咬床板怎么办 床板上的虫咬了怎么办 住的房间有臭虫怎么办 租的房子有臭虫怎么办 瑜伽垫放地上脏怎么办 瑜伽垫和地面滑怎么办 练瑜伽时瑜伽垫全是汗水怎么办 车钥匙放洗衣机洗了怎么办 瑜伽垫边上掉渣怎么办 晚上睡地上后背不舒服怎么办 小孩子天天晚上看电视不睡觉怎么办 宝宝天天晚上不睡觉怎么办 老公天天晚上不睡觉怎么办 小孩天天晚上不睡觉怎么办 摸了貔貅的眼睛怎么办 买的爬行垫滑怎么办 买了爬行垫有毒怎么办 xpe爬行垫破了怎么办 做瑜伽时平衡不好怎么办 鼻翼两侧发红长痘怎么办 孕后期睡觉背疼怎么办 练了瑜伽后腰痛怎么办 尿路口长疮疼痛怎么办 来月经吃了辣的怎么办 泳衣打湿后特别难脱怎么办 脚臭怎么办教你除臭方法 袜子没干就穿了进湿气怎么办 狗喜欢往床上跑怎么办 泰迪在床上睡觉怎么办 泰迪睡觉换地方怎么办 猫一定要和人睡怎么办 狗喜欢跳到床上怎么办 幼猫晚上不睡觉怎么办 宝宝不在床上睡觉怎么办呢 瑜伽球表面粘了怎么办 鞋子洗了很臭怎么办