自定义文本显示TextView

现在的app,数据我们从后台拿到,然后显示在指定的区域,但是后台可能会包含一些html的标签,像<a>,<b>等等,我们总不能让用户看到这些内容,我们客户端处理一下就好了,自定义TextView就OK。

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
61
public class MyCustomTextView extends TextView &#123;
public MyCustomTextView(Context context) &#123;
super(context);
&#125;

public MyCustomTextView(Context context, AttributeSet attrs) &#123;
super(context, attrs);
&#125;

public MyCustomTextView(Context context, AttributeSet attrs, int defStyle) &#123;
super(context, attrs, defStyle);
&#125;

public void set(String comments) &#123;
if (comments.contains("<")) &#123;
setText(Html.fromHtml(comments));
setMovementMethod(LinkMovementMethod.getInstance());
CharSequence text = getText();
if (text instanceof Spannable) &#123;
int end = text.length();
Spannable sp = (Spannable) getText();
URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
SpannableStringBuilder style = new SpannableStringBuilder(
text);
style.clearSpans();// should clear old spans

// 循环把链接发过去
for (URLSpan url : urls) &#123;
MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
style.setSpan(myURLSpan, sp.getSpanStart(url),
sp.getSpanEnd(url),
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
&#125;
setText(style);
&#125;
&#125; else &#123;
setText(comments);
&#125;
&#125;

class MyURLSpan extends ClickableSpan &#123;

private String mUrl;

MyURLSpan(String url) &#123;
mUrl = url;
&#125;

@Override
public void updateDrawState(TextPaint ds) &#123;
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#507daf"));
ds.setUnderlineText(false); // 去掉下划线
&#125;
//处理链接点击事件
@Override
public void onClick(View widget) &#123;

&#125;
&#125;
&#125;

使用的时候直接在XML中引用就好了,然后java代码中显示我们要显示的内容。MyCustomTextView.set(content);就好了。

版权声明:



除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

坚持原创技术分享,您的支持将鼓励我继续创作!