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>
  • 相关阅读:
    线段树&&线段树的创建线段树的查询&&单节点更新&&区间更新
    树&二叉树&&满二叉树&&完全二叉树&&完满二叉树
    Git学习记录 力做全网最强入门教程
    Markdown测试
    [转载] c++对结构体数组排序
    c/c++ 中#ifndef和#endif的作用及使用
    交互题(apio2016Gap)
    linux下对拍
    CTSC2017密钥、吉夫特
    省队十连测
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4207766.html
Copyright © 2011-2022 走看看