Android EditView之插入表情

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229


白虹剑

        殷天正从身旁包袱中取出一口长剑,对张无忌道:“这柄白虹剑送了给你,这剑虽不如老贼尼的倚天剑有名,但也是江湖上罕见的利器。”说着伸指在剑刃上一弹,那剑陡地弯了过来,随即弹直,嗡嗡作响,声音清越。

        今天我们学习如何在Android平台“白虹剑”EditView中插入表情图像,类似于我们在实际生活中用QQ聊天和发送短信时插入表情的操作。下面给出该情景的案例:

一、案例技术要点

1.java.lang.reflect.Field:利用Reflect相关技术获取资源文件夹下表情图片Id。
2.android.text.SpannableString:提供一个总体文本是不可变的,但是支持局部对象(它所标记的)可以附加或分离。
3.android.text.style.ImageSpan:为SpannableString附加Bitmap对象。
4.SpannableString类setSpan(...):设置Bitmap、显示文本内容和显示样式。
5.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE:表示在当前文本前端和后端新增字符均不采用当前显示效果。

二、案例代码陈列

工程包目录


AndroidManifest.xml

[html]  view plain copy print ?
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     package="com.android.edittext"  
  3.     android:versionCode="1"  
  4.     android:versionName="1.0" >  
  5.   
  6.     <uses-sdk  
  7.         android:minSdkVersion="8"  
  8.         android:targetSdkVersion="15" />  
  9.   
  10.     <application  
  11.         android:icon="@drawable/ic_launcher"  
  12.         android:label="@string/app_name" >  
  13.         <activity  
  14.             android:name=".EditTextMainActivity"  
  15.             android:label="@string/app_name" >  
  16.             <intent-filter>  
  17.                 <action android:name="android.intent.action.MAIN" />  
  18.   
  19.                 <category android:name="android.intent.category.LAUNCHER" />  
  20.             </intent-filter>  
  21.         </activity>  
  22.     </application>  
  23.   
  24. </manifest>  
strings.xml
[html]  view plain copy print ?
  1. <resources>  
  2.     <string name="app_name">EditText输入表情图像</string>  
  3.     <string name="btn">添加表情</string>  
  4. </resources>  
main.xml
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent" >  
  6.   
  7.     <EditText android:id="@+id/et"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_marginTop="10dp" />  
  11.     <Button android:id="@+id/btn"  
  12.         android:layout_width="match_parent"  
  13.         android:layout_height="wrap_content"  
  14.         android:text="@string/btn" />  
  15.   
  16. </LinearLayout>  
EditTextMainActivity.java
[java]  view plain copy print ?
  1. package com.android.edittext;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.util.Random;  
  5.   
  6. import android.app.Activity;  
  7. import android.graphics.Bitmap;  
  8. import android.graphics.BitmapFactory;  
  9. import android.os.Bundle;  
  10. import android.text.Spannable;  
  11. import android.text.SpannableString;  
  12. import android.text.style.ImageSpan;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16. import android.widget.EditText;  
  17.   
  18. /** 
  19.  * EditText案例一:输入表情图像(类似QQ) 
  20.  * @author lynnli1229 
  21.  */  
  22. public class EditTextMainActivity extends Activity {  
  23.     private EditText et;  
  24.     private Button btn;  
  25.   
  26.     @Override  
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         et = (EditText) findViewById(R.id.et);  
  31.         btn = (Button) findViewById(R.id.btn);  
  32.         btn.setOnClickListener(new OnClickListener() {  
  33.             @Override  
  34.             public void onClick(View v) {  
  35.                 //随机生成1-9之间的一个数,用于标示表情图像的文件名  
  36.                 int faceId = new Random().nextInt(9) + 1;  
  37.                 try {  
  38.                     Field field = R.drawable.class.getDeclaredField("face" + faceId);  
  39.                     int resourceId = Integer.parseInt(field.get(null).toString());  
  40.                     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);  
  41.                     ImageSpan imageSpan = new ImageSpan(EditTextMainActivity.this, bitmap);  
  42.                     SpannableString spannableString = new SpannableString("face");  
  43.                     spannableString.setSpan(imageSpan, 04, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  44.                     et.append(spannableString);  
  45.                 } catch (Exception e) {  
  46.                     e.printStackTrace();  
  47.                 }  
  48.             }  
  49.         });  
  50.     }  
  51.   
  52. }  
三、案例效果展示
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值