表情开发 在Edittext中显示表情

本文详细介绍了如何在应用中集成并显示表情包,包括字符串组的定义、图片资源的准备、表情显示组件的实现及点击事件响应。通过使用HashMap进行表情与图片ID的映射,并在GridView中展示表情图标,实现用户在输入文本时插入表情的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本项目图片文字格式为:[shengli]-

1.首先,需要一个字符串组

res values 目录下;

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="emoj">
        <item id="shengli">shengli</item>
        <item id="aoman">aoman</item>
        <item id="bizui">bizui</item>
        <item id="caidao">caidao</item>
        <item id="fendou">fendou</item>
    </string-array>

</resources>

2.把需要的图片拷贝到drawable目录下


3.写好显示表情的GridView和GridView需要用到的Layout

以后上传

  4.代码:

HashMap<String, Integer> mFaceHash;
    String[] faceStr;

mFaceHash = new HashMap<String, Integer>();
        faceStr = getApplicationContext().getResources().getStringArray(
                R.array.emoj);
        for (int i = 0; i < faceStr.length; i++) {

            int resID = getApplicationContext().getResources().getIdentifier(
                    faceStr[i], "drawable", "com.org.sns.ui");
            mFaceHash.put(faceStr[i], resID);
        }

显示表情部分:

    Drawable drawable = SendWeiboActivity.this.getResources().getDrawable(
                Integer.parseInt(content));
        if (drawable != null) {
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth()*3,
                    drawable.getIntrinsicHeight()*3);
            ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
            ss.setSpan(span, 0, content.length(),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return ss;


表情部分:

GridView gv = (GridView) findViewById(R.id.emoj);

            if (gv.getVisibility() == View.GONE) {
                gv.setVisibility(View.VISIBLE);

                ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();

                for (String face_image : faceStr) {
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    int resID = getApplicationContext().getResources()
                            .getIdentifier(face_image, "drawable",
                                    "com.org.sns.ui");
                    map.put("ItemImage", resID);// 添加图像资源的ID
                    Log.e("aril", ":图片ID" + resID);
                    lstImageItem.add(map);
                }

                SimpleAdapter mSimpleAdapter = new SimpleAdapter(
                        SendWeiboActivity.this, lstImageItem,
                        R.layout.send_weibo_emoj, new String[] { "ItemImage" },
                        new int[] { R.id.emotion });
                gv.setAdapter(mSimpleAdapter);
                gv.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        // sendcontent.setText(sendcontent.getText().toString());
                        int cursor = sendcontent.getSelectionStart();
                        // sendcontent.getText().insert(cursor,
                        // txtToImg(mFaceHash.get(arg2) + ""));

                        sendcontent.getText().insert(cursor,
                                txtToImg("" + mFaceHash.get(faceStr[arg2])));
                        Log.e("aril", arg2 + "--2");
                        Log.e("aril", arg3 + "--3");
                    }
                });
            } else {
                gv.setVisibility(View.GONE);
            }



未尽之处,日后补充


6.图片大小问题:太小这么显示就好了

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth()*3,
                    drawable.getIntrinsicHeight()*3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值