zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    解析大型.NET ERP系统 权限模块设计与实现
    Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
    解析大型.NET ERP系统 单据编码功能实现
    解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
    Windows 10 部署Enterprise Solution 5.5
    解析大型.NET ERP系统 设计异常处理模块
    解析大型.NET ERP系统 业务逻辑设计与实现
    解析大型.NET ERP系统 多国语言实现
    Enterprise Solution 管理软件开发框架流程实战
    解析大型.NET ERP系统 数据审计功能
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4207766.html
Copyright © 2011-2022 走看看