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
的值中有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(),若点击电话的链接,是直接跳转到拨打电话的页面,即不会调用
clickablespan
中的onclick()方法,也不会调用onclicklistener
中的onclick()方法。同时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,否则不会。)。
网友评论