Android实现TextView中部分文字监听事件

来源:互联网 发布:淘宝优质网店 编辑:程序博客网 时间:2024/05/12 03:40

    通常我们只需要用TextView来显示文本信息,展示给用户看,而把点击相应的监听事件交给Button等控件来处理,当然TextView也可以实现点击事件。有时候我们要对TextView中的部分文字进行点击,我们应该如何操作呢?一般有以下三种方式:

1,在布局文件中设置TextView的android:autoLink属性,比如设置android:autoLink=“phone”,则可以点击手机号码直接拨打电话。android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) 等。这个最简单,但实现的目标也比较单一,比如只可以打电话或发邮件等。

2,用Html格式中的href链,比如:

String content= "<font color=#ff0000> 点击对应文字可以跳转网页面" + "</font><a href='http://www.baidu.com'>百度</a>" ; 
TextView linkTextView= (TextView) findViewById(R.id.linkTextView); 
textView.setText(Html.fromHtml(content)); 

 点击上面的百度二字就可以直接 跳转到百度网页。这种方式一般只能跳转到网页面面。

3,当我们想实现点击部分文字跳转到指定的页面或是实现特定的效果(比如弹出提示对话框,Toast信息等)我们可以使用SpannableString来实现:

       TextView textView=(TextView)findViewById(R.id.tv);

SpannableString spanStr = new SpannableString(textView.getText().toString());
NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan();//这句话的目的是去除特殊文字下划线效果
spanStr.setSpan(new ForegroundColorSpan(Color.parseColor("#00b5f0")), s.length() - 7, s.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//设置部分文字文字颜色,这里的文字长度肯定大于7才行
s.setSpan(new ClickableSpan() {

@Override
public void onClick(View widget) {
//这里就是点击事件,实现自己想要的效果
}
}, spanStr.length() - 7, s.length(), Spanned.SPAN_MARK_MARK);
spanStr.setSpan(mNoUnderlineSpan, spanStr.length() - 7, spanStr.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(spanStr);
textView.setMovementMethod(LinkMovementMethod.getInstance());

实现清除文字下划线:

public class NoUnderlineSpan extends UnderlineSpan {

@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false);
}
}

当然还有其它的方法啦!

0 0