TextView的部分点击事件和点击事件

来源:互联网 时间:2017-01-13

1.在TextView中实现部分点击
我在activity中使用了clickablespan这个类,然后完全按照视频上的操作下来,发现点击时不响应,于是我便设置了电话的链接,发现这时点击
自己设置的区域就会响应,但是如果我把电话链接删了,这时就又不会响应,于是我便上网查找,如何设置Textview的部分点击,发现是因为我
少加了一行代码myTextView.setMovementMethod(LinkMovementMethod.getInstance());加上之后就行了(可是视频里也没有,可能是视频太早了,
系统的源代码进行了细微的更改)。


结论:使用clickablespanTextView设置部分点击,记得要为TextView设置movementMethod
2.在TextView中实现完全点击
这个只需要为textview设置监听器就行,由于我是在之前的代码中直接加入的,然后当我点击我之前设置的部分点击的区域时,发现是先调用


```clickablespan```中的onclick()方法,也不会调用```onclicklistener```中的onclick()方法,因为没有打印出这两个方法中的输出语句。同时这里有一点
需要提一下,如果这时你在xml文件中声明```android:clickable="false"```, ```android:linksClickable="false"```,这时你会发现,无论是自己设置的
部分区域,亦或是电话的链接,还是```textview```中的任何地方,都是可以点击的。这是因为无论是```setOnClickListener```会强制改变```clickable```属性,
而```myTextView.setMovementMethod(LinkMovementMethod.getInstance())```;会改变```android:linksclickable```的属性(这里得提一点,如果你将
```myTextView.setMovementMethod(LinkMovementMethod.getInstance())```代码去掉,然后设置```android:linksclickable="true"```,这时就会有一个有趣的
现象,若```textview```的值中有```phone```,```web```之类的,那么无论是自己设置的区域还是phone,web都可以点击,若是没有phone,web之类的,那么自己设置的
区域就无法点击,感觉是```android:linksclickable="true"```属性是对于```android:autolink```而设置的,若```textview```中的内容存在这些,则会让```linksclickable

设置为true,否则不会。),所以都可以点击。如果你将setonclicklistener()去掉,然后设置android:linksClickable="true"android:clickable="false"
发现自己设置的区域和电话依然可以点击。


结论:为TextView设置完全点击时,为TextView设置onclicklistener监听器,若同时还有部分点击,以及电话。那么当点击设置的部分点击区域
时,先运行clickablespan中的onclick(),然后是onclicklistener中的onclick(),若点击电话的链接,是直接跳转到拨打电话的页面,即不会调用


而```myTextView.setMovementMethod(LinkMovementMethod.getInstance())```;会改变```android:linksclickable```的属性(这里得提一点,如果你将
```myTextView.setMovementMethod(LinkMovementMethod.getInstance())```代码去掉,然后设置```android:linksclickable="true"```,这时就会有一个有趣的
现象,若```textview```的值中有phone,web之类的,那么无论是自己设置的区域还是phone,web都可以点击,若是没有phone,web之类的,那么自己设置的
区域就无法点击,感觉是```android:linksclickable="true"```属性是对于```android:autolink```而设置的,若```textview```中的内容存在这些,则会让```linksclickable

设置为true,否则不会。)。




相关阅读:
Top