本文实例展示了android中实现为textview添加多个可点击的文本的方法。该功能在android社交软件的制作中非常具有实用价值。分享给大家供大家参考。具体如下:
很多时候我们在使用社交软件的过程中多多少少会为别人的帖子点赞,如下图所示:
可以看到用户页面显示出来的只是点了赞的用户的名称,点击这些名称可以进入到该用户的主页。下面我们就来实现类似的效果。
具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
@override
protected void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
textview mtextview = (textview) rootview.findviewbyid(r.id.like_tv);
// 构造多个超链接的html, 通过选中的位置来获取用户名
stringbuilder sbbuilder = new stringbuilder();
for ( int i = 0 ; i < 10 ; i++) {
sbbuilder.append( "username-" + i + "、" );
}
string likeusers = sbbuilder.substring( 0 , sbbuilder.lastindexof( "、" )).tostring();
mtextview.setmovementmethod(linkmovementmethod.getinstance());
mtextview.settext(addclickablepart(likeusers), buffertype.spannable);
}
/**
* @param str
* @return
*/
private spannablestringbuilder addclickablepart(string str) {
// 第一个赞图标
imagespan span = new imagespan(getactivity(), r.drawable.umeng_comm_like);
spannablestring spanstr = new spannablestring( "p." );
spanstr.setspan(span, 0 , 1 , spannable.span_inclusive_exclusive);
spannablestringbuilder ssb = new spannablestringbuilder(spanstr);
ssb.append(str) ;
string[] likeusers = str.split( "、" );
if (likeusers.length > 0 ) {
// 最后一个
for ( int i = 0 ; i < likeusers.length; i++) {
final string name = likeusers[i];
final int start = str.indexof(name) + spanstr.length();
ssb.setspan( new clickablespan() {
@override
public void onclick(view widget) {
toast.maketext(getview().getcontext(), name,
toast.length_short).show();
}
@override
public void updatedrawstate(textpaint ds) {
super .updatedrawstate(ds);
// ds.setcolor(color.red); // 设置文本颜色
// 去掉下划线
ds.setunderlinetext( false );
}
}, start, start + name.length(), 0 );
}
}
return ssb.append( "等"
+ likeusers.length + "个人赞了您." );
} // end of addclickablepart
|
运行效果如下图所示:
希望本文所述对大家的android程序设计有所帮助