Android之TextView高级用法
功能:
1. 在TextView中显示图片,类似于含有表情图片的聊天
2.设置TextView的部分text可以点击
说明:
SpannableString 实现了CharSequence接口,可以将text的指定部分标记为CharacterStyle对象,如ImageSpan,ClickableSpan等,TextView在显示时会将标记为CharacterStyle的部分text做特定处理
代码1: 在TextView中显示图片
// TextView
mTextView = (TextView)
findViewById(R.id.textView1);
// 创建SpannableString对象
SpannableString stringSpan = new SpannableString("0123456789");
//
创建CharacterStyle对象
ImageSpan imageSpan = new ImageSpan(this,
R.drawable.p1);
//
将SpannableString的0~3共3个字符标记为ImageSpan对象(CharacterStyle)
stringSpan.setSpan(imageSpan,
0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//
将SpannableString的4~5共1个字符标记为imageSpan对象
//
注意:一个ImaggeSpan对象只能标记一次
stringSpan.setSpan(new
ImageSpan(this,R.drawable.p2), 4, 5,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
// 显示text,此时,输出结果为:
图片(p1)3图片(p2)56789
mTextView.setText(getSpannableString());
代码2: 在TextView中显示部分可点击的文字
// TextView
mTextView = (TextView)
findViewById(R.id.textView1);
// 创建SpannableString对象
SpannableString stringSpan = new SpannableString("0123456789");
//
创建ClickableSpan对象,用于标记可点击的text
ClickableSpan clickSpan = new
ClickableSpan() {
//
当被标记时text被点击时的回调方法
@Override
public void onClick(View
arg0) {
Log.i("DTV", "click");
}
//
用于定义被标记文字的样式
@Override
public void
updateDrawState(TextPaint ds)
{
super.updateDrawState(ds);
//
设置无下划线
ds.setUnderlineText(false);
}
};
//
标记文字
stringSpan.setSpan(clickSpan, 6, 9,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 显示text,此时,输出结果为:
图片(p1)3图片(p2)56789
mTextView.setText(stringSpan);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());//
必须要有,否则不会调用onClick方法