效果:
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;
}
}
}