类似于微信表情在edittext中显示

效果:


package com.example.myappdemo;

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.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

/**
 * @author ty
 * @createdate 2013-8-16 下午4:40:39
 * @Description: 编写上面代码需要注意如下几点。 1.
 *               由于R.drawable中的资源ID都是public的静态变量,因此,可直接使用Field
 *               .get方法获得这些变量的值。如果是private或protected的变量
 *               ,需要field.setAccessible(true)设置变量值的访问权限才可以读写这些变量。 
 *               2.
 *               使用Field.get方法获得变量值时
 *               ,如果是静态变量。Field.get方法的参数值设为null即可。如果不是静态变量,需要为Field
 *               .get方法指定一个变量所在类的对象作为参数值。 
 *               3.
 *               由于EditText类不能直接插入Span对象,因此,需要先使用SpannableString对象来封装Span对象
 *               (如本例中的ImageSpan对象),再将SpannableString对象插入到EditText控件中。
 */
public class MainActivity extends Activity implements OnClickListener {
	private TextView text;
	private EditText edit;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(this);
		edit = (EditText) findViewById(R.id.editText);
		// text = (TextView) findViewById(R.id.text);
		// text.setText("北京,中华人民共和国首都、直辖市和国家中心城市,中国的政治中心、文化中心,中国经济、金融的决策和管理中心,中华人民共和国中央人民政府和全国人民代表大会所在地,具有重要的国际影响力,也是世界上最大的城市之一。");
		// text.setMovementMethod(LinkMovementMethod.getInstance());// 设置可以手动滑动
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			int i = new Random().nextInt(9) + 1;

			try { // 根据随机产生的1至9的整数从R.drawable类中获得相应资源ID(静态变量)的Field对象
				Field field = R.drawable.class.getDeclaredField("biaoqing0" + i);
				// 获得资源ID的值,也就是静态变量的值
				int resourceId = Integer.parseInt(field.get(null).toString());
				// 根据资源ID获得资源图像的Bitmap对象
				Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
				// 根据Bitmap对象创建ImageSpan对象
				ImageSpan imageSpan = new ImageSpan(this, bitmap);
				// 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
				SpannableString spannableString = new SpannableString("biaoqing0"+i);
				// 用ImageSpan对象替换face
				spannableString.setSpan(imageSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
				// 将随机获得的图像追加到EditText控件的最后
				edit.append(spannableString);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			break;

		default:
			break;
		}

	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值