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>
  • 相关阅读:
    halcon应用案例探究
    Halcon中模板匹配方法的总结归纳
    halcon开发必读
    全局Threshold和动态阈值分割Dyn_Threshold的应用场景
    halcon电路断裂检测
    halcon之 distance_transform
    VS调试不能进入断点,提示当前不会命中断点还未为文档加载任何符号
    .net reactor使用教程(一)——界面各功能说明(转)
    (转) 开运算opening_circle和闭运算closing_circle的异同
    Win10系统安装UEFI+GPT配置
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4207766.html
Copyright © 2011-2022 走看看