Spanned接口定义方法
1.int getSpanEnd(Object what):获取Span对象中字符串最后一个字符在Editable字符串中的位置;
2.int getSpanFlags(Object what):获取setSpan方法为Span对象设定的flags参数值;
3.<T> T[] getSpans(int start,int end,Class<T> kind):
4.int getSpanStart(Object tag):获取Span对象中字符串第一个字符在Editable字符串中的位置;
5.int nextSpanTransition(int start,int end,Class kind):
Spannable接口定义方法
1.void removeSpan(Object what):把Span对象从Editable对象中删除;
2.void setSpan(Object what,int start, int end, int flags):向Editable对象中添加Span对象;
关于上面所说的Span对象,在Android有这样一簇类
关于他们的具体内容,这里不详细讨论。[直接添加Span对象的测试都失败了,以后还会测试的,所以这里]要把Span对象加入到Editable对象中,需要借助SpannableString和SpannableStringBuilder两个类
这里给出两个示例,针对ImageSpan和URLSpan,分别是向EditText中添加图像和URL(支持点击事件):下面这两个方法定义在以EditText为基类的自定义类中,当然也可以写在外面,直接使用EditText对象,有兴趣可以试一下。
<span style="font-size:18px;">/**
* @param uri 图像文件URI
*/
public void addBitmap(Uri uri){
Bitmap bitmap = null;
try {
ContentResolver resolver = getContext().getContentResolver();
Bitmap originalBitmap = BitmapFactory.decodeStream(resolver
.openInputStream(uri));
bitmap = BitmapUtils.resize(originalBitmap, 100, 100);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SpannableStringBuilder ssb = getBitmapToDisplay(bitmap,uri);
// 先获取EditText中的内容
Editable et = getEditableText();
// 图片在EditText内容中的位置
int start = et.length();
// 向内容中插入图片
et.insert(start, ssb);
// 设置EditText内容为插入图片后的内容
setText(et);
// 设置EditText中光标在最后面显示
Selection.setSelection(getEditableText(), start + ssb.length());
}
private SpannableStringBuilder getBitmapToDisplay(Bitmap bitmap, Uri uri) {
String path = uri.getPath();
SpannableStringBuilder ssb = new SpannableStringBuilder(path);
ImageSpan span = new ImageSpan(this.getContext(), bitmap);
ssb.setSpan(span, 0, path.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ssb;
}</span>
<span style="font-size:18px;"> public URLSpan urlSpan;
public void addUrl(String url){
SpannableString ss = getUrlToDisplay(url);
// 先获取EditText中的内容
Editable et = getEditableText();
// 图片在EditText内容中的位置
int start = et.length();
// 向内容中插入图片
et.insert(start, ss);
// 设置EditText内容为插入图片后的内容
setText(et);
// 设置EditText中光标在最后面显示
Selection.setSelection(getEditableText(), start + ss.length());
}
private SpannableString getUrlToDisplay(String url){
SpannableString ss = new SpannableString(url);
urlSpan = new URLSpan(url);
ss.setSpan(urlSpan,0,url.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return ss;
}
public void onClick(){
if(urlSpan != null){
urlSpan.onClick(this);
}
}</span>
最后一个Click事件响应,在EditText的点击事件中调用。