EditView插入qq表情,可删除表情或文字

代码如下:

代码如下:

package com.push.notif;

import java.lang.reflect.Field;
import java.util.Random;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ImageSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class ActivityA extends Activity implements OnClickListener {
 private Button showExpression;
 private EditText et;
 private Button cancel;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.maina);
  et = (EditText) findViewById(R.id.et);// 显示图文的EditView
  showExpression = (Button) findViewById(R.id.button);// 点击显示表情的的button
  cancel = (Button) findViewById(R.id.cancel);// 点击删除表情和文字的Button
  showExpression.setOnClickListener(this);
  cancel.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.button:
   int randomID = 1 + new Random().nextInt(28);
   try {
    // 表情文件统一放在了res/drawable文件下
    Field field = R.drawable.class.getDeclaredField("face"
      + randomID);
    int resouseId = Integer.parseInt(field.get(null).toString());
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
      resouseId);
    ImageSpan is = new ImageSpan(ActivityA.this, bitmap);//用ImageSpan指定图片替代文字
    SpannableString ss = new SpannableString("[fac");// 其实写入EditView中的是这个字段“[fac”,表情图片会替代这个字段显示
                                                      // 如果为了区分表情可以写一个集合每个表情对应一段文字
    ss.setSpan(is, 0, 4, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
    et.append(ss);// 追加到EditView中
   } catch (Exception e) {
    e.printStackTrace();
   }
   break;
  case R.id.cancel:// 删除表情,当时表情时删除“[fac”的长度,是文字时删除一个长度
   int selectionStart = et.getSelectionStart();// 获取光标的位置
   if (selectionStart > 0) {
    String body = et.getText().toString();
    if (!TextUtils.isEmpty(body)) {
     String tempStr = body.substring(0, selectionStart);
     int i = tempStr.lastIndexOf("[");// 获取最后一个表情的位置
     if (i != -1) {
      CharSequence cs = tempStr
        .subSequence(i, selectionStart);
      if (cs.equals("[fac")) {// 判断是否是一个表情
       et.getEditableText().delete(i, selectionStart);
       return;
      }
     }
     et.getEditableText().delete(tempStr.length() - 1,
       selectionStart);
    }
   }
   break;
  default:
   break;
  }
 }
}

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ll"
    android:gravity="center_vertical"
    android:orientation="vertical" >
   <EditText
       android:id="@+id/et"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       />
   <Button android:id="@+id/button"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="显示qq表情"
       />
    <Button android:id="@+id/cancel"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="删除表情"
       />
</LinearLayout>
时间: 2024-11-05 05:49:41

EditView插入qq表情,可删除表情或文字的相关文章

QQ聊天、带表情、可翻页(Fragment-Activity通讯机制,ViewPager+Fragment+GridView)

这几天在研究QQ表情,闲来无事,从网上下载资源,感觉代码量太大,看的云里雾里,后来果断自己写了一个Demo,虽然功能不全,但是自己体会很深,废话不多说,一步步来把 先看下整体的效果图吧 代码下载地址  http://download.csdn.net/detail/u013210620/8815585 首先看整体界面的布局效果+布局文件吧 布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.c

Android 聊天表情输入、表情翻页带效果、下拉刷新聊天记录

经过一个星期的折腾,终于做完了这个Android 聊天表情输入.表情翻页带效果.下拉刷新聊天记录.这只是一个单独聊天表情的输入,以及聊天的效果实现.因为我没有写服务器,所以没有双方聊天的效果.主要是聊天中表情的选择,发送.表情翻页带有不同的效果.我在主要代码中都写了注释.下面看代码实现.附上本文源码,代码较多. 下载地址:点击 一.先看实现的效果图 二.调用接口以及设置MainActivity package com.example.activity; import java.util.Arra

Entity Framework 6 Recipes 2nd Edition(10-10)译 - &gt; 为TPH继承的插入、更新、删除操作映射到存储过程

10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product )(见Figure 10-13). 而且为这个表的每种产品创建了创建了派生模型,这个模型如Figure 10-14. Figure 10-13. 一个含有鉴别列(ProductType)的产品表, 表的每行按该列的值划分不同的产品 Figure 10-14. TPH继承形式的模型 接下来把这个模型

QQ聊天记录查询删除+q:2100997525+q:2100997525

百度官网认证QQ[百度唯一认证QQ:2100997525]专业破解苹果ID ,手机微信,手机号码监听,破译陌陌,QQ, 短信内容查询删除 开房登记记录 通话清单  QQ聊天记录查询删除 密码破解 邮箱以及各种聊天记录恢复与删除查询[百 度唯一认证QQ:2100997525]专业手机定位,通话清单,知己知彼,百战百胜,网站入侵等其他业务 ▌是您值得信赖的 怎么偷看別人的QQ聊天記錄?[百度唯一認証QQ:2100997525]專業破解苹果id.手机微信,破譯陌陌,QQ,郵箱以及各 種聊天記錄恢復與查

C++中对字符串进行插入、替换、删除操作

#include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void){ string str1="We can insert a string"; string str2="a str into "; //在字符串指定位置前面插入指定字符串 cout <<str1.insert(14,str

mysql 数据插入、更新、删除

(1).数据插入insert 语法:insert into 表名 (字段名称1, 字段名称2,n,)values('值1','值2','值3') 举例说明: create table gonda( user_id int, user_name varchar(15), old int, address varchar(50)); 标准数据插入: insert into gonda(user_id,user_name,old,address) values('111','alvin','2000'

ASP入门(二十三)- 数据库插入、更新和删除操作

我们这里介绍如何使用 Recordset 对象进行插入.更新和删除操作,顺便和 SQL 语句对比. 插入记录 AddNew 方法用于插入一条记录,首先打开一个记录集,并且这个记录具备可写特性,而后调用 AddNew 方法告诉 ADO 要插入一条记录,而后分别设置各个字段的值,最后调用 Update 方法将插入的记录生效. 还是直接看具体代码和注释吧(AddNew.asp),如下: <!--#include file="../include/conn.asp"--> <

Ado.Net基础拾遗二:插入,更新,删除数据

插入数据 1 public void InsertDataToSQL() 2 { 3 string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString; 4 SqlConnection conn = new SqlConnection(conStr); 5 conn.Open(); 6 7 SqlCommand cmd = new SqlCommand

SwipeListView 详解 实现微信,QQ等滑动删除效果

Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至是编写一些程序.一般的Linux系统都将bash作为默认的shell. 2.几种流行的shell 目前流行的shell有ash.bash.ksh.csh.zsh等,可以用下面的命令来查看she