首页 > 代码库 > Android之TextView高级用法
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方法