android 给 textview 加上效果和事件响应,Android 给 TextView 加上效果和事件响应

研读 ApiDemo 源码至 com.example.Android.apis.text.Link 类。首先,看一下其运行效果:

1eaa4f4027edc6ef6a8c222c9f519249.png

要给 TextView 加上效果,方式主要有几种:

第一种,自动应用效果,使用 android:autolink 属性,如:

android:id="@+id/text1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:autoLink="all"

android:text="@string/link_text_auto"

/>

第二种,在文本中使用 标签,如:

text2:This is some other

text, with alinkspecified

via an <a> tag.  Use a \"tel:\" URL

todial a phone number

第三种,和第二种其实是一样的,只不过将文本改在 JAVA 代码中,如:

TextView t3 = (TextView) findViewById(R.id.text3);

t3.setText(

Html.fromHtml(

"text3:  Text with a "+

"link "+

"created in the Java source code using HTML."));

t3.setMovementMethod(LinkMovementMethod.getInstance());

第四种,前面三种可以说都是自动的,而第四种就是纯“手工”的了。通过创建 SpanableString 字符串,并在之上创 建一个或多个 Span 来实现丰富的效果。例子如下:

SpannableString ss =newSpannableString("text4: Click here to dial the phone.");

ss.setSpan(newStyleSpan(Typeface.BOLD),0,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(newURLSpan("tel:4155551212"),13,17,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView t4 = (TextView) findViewById(R.id.text4);

t4.setText(ss);

t4.setMovementMethod(LinkMovementMethod.getInstance());

完整的代码见 ApiDemo 吧,下面我提几点需要注意的:

setMovementMethod,此方法在需要响应用户事件时使用,如点击一个电话号码就跳转到拨号页面。如果不执行这个方法是不会响应事件的,即便文本看着已经是下划线蓝色字了。

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,这是在 setSpan 时需要指定的 flag,它的意义我试了很久也没试出来,睡个觉,今天早上才突然有点想法,试之,果然。它是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)。看个截图就更明白了:

86a052f24d8d9c97989af9410c3d2b9a.png

对比一下

ef0fae164eb96b654ccafa1df001cd86.png

1

2

下一页

http://www.dengb.com/gjrj/796726.htmlwww.dengb.comtruehttp://www.dengb.com/gjrj/796726.htmlTechArticle研读 ApiDemo 源码至 com.example.Android.apis.text.Link 类。首先,看一下其运行效果: 要给 TextView 加上效果,方式主要有几种: 第一种,自动应用...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值