1.在TextView中实现部分点击我在activity中使用了clickablespan这个类,然后完全按照视频上的操作下来,发现点击时不响应,于是我便设置了电话的链接,发现这时点击自己设置的区域就会响应,但是如果我把电话链接删了,这时就又不会响应,于是我便上网查找,如何设置Textview的部分点击,发现是因为我少加了一行代码
myTextView.setMovementMethod(LinkMovementMethod.getInstance());加上之后就行了(可是视频里也没有,可能是视频太早了,系统的源代码进行了细微的更改)。
结论:使用clickablespan为TextView设置部分点击,记得要为TextView设置movementMethod。
2.在TextView中实现完全点击
这个只需要为textview设置监听器就行,由于我是在之前的代码中直接加入的,然后当我点击我之前设置的部分点击的区域时,发现是先调用clickablespan中的onclick(),然后是onclicklistener中的onclick(),而点击电话的链接时,是直接跳转到拨打电话的页面,即不会调用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的值中有phoneweb之类的,那么无论是自己设置的区域还是phoneweb都可以点击,若是没有phoneweb之类的,那么自己设置的区域就无法点击,感觉是android:linksclickable=”true”属性是对于android:autolink而设置的,若textview中的内容存在这些,则会让linksclickable设置为true,否则不会。),所以都可以点击。如果你将setonclicklistener()去掉,然后设置android:linksClickable="true",android:clickable=”false”,发现自己设置的区域和电话依然可以点击。
结论:为TextView设置完全点击时,为TextView设置onclicklistener监听器,若同时还有部分点击,以及电话。那么当点击设置的部分点击区域时,先运行clickablespan中的onclick(),然后是onclicklistener中的onclick(),若点击电话的链接,是直接跳转到拨打电话的页面,即不会调用clickablespan中的onclick()方法,也不会调用onclicklistener中的onclick()方法。同时setOnClickListener会强制改变clickable属性,而myTextView.setMovementMethod(LinkMovementMethod.getInstance());会改变android:linksclickable的属性(这里得提一点,如果你将myTextView.setMovementMethod(LinkMovementMethod.getInstance())代码去掉,然后设置android:linksclickable="true",这时就会有一个有趣的现象,若textview的值中有phoneweb之类的,那么无论是自己设置的区域还是phoneweb都可以点击,若是没有phoneweb之类的,那么自己设置的区域就无法点击,感觉是android:linksclickable=”true”属性是对于android:autolink而设置的,若textview中的内容存在这些,则会让linksclickable设置为true,否则不会。)。