1.在TextView
中實(shí)現(xiàn)部分點(diǎn)擊
我在activity中使用了clickablespan
這個(gè)類,然后完全按照視頻上的操作下來(lái)古拴,發(fā)現(xiàn)點(diǎn)擊時(shí)不響應(yīng),于是我便設(shè)置了電話的鏈接,發(fā)現(xiàn)這時(shí)點(diǎn)擊
自己設(shè)置的區(qū)域就會(huì)響應(yīng)憨募,但是如果我把電話鏈接刪了,這時(shí)就又不會(huì)響應(yīng)袁辈,于是我便上網(wǎng)查找菜谣,如何設(shè)置Textview
的部分點(diǎn)擊,發(fā)現(xiàn)是因?yàn)槲?br>
少加了一行代碼myTextView.setMovementMethod(LinkMovementMethod.getInstance())
;加上之后就行了(可是視頻里也沒(méi)有,可能是視頻太早了尾膊,
系統(tǒng)的源代碼進(jìn)行了細(xì)微的更改)媳危。
結(jié)論:使用clickablespan
為TextView
設(shè)置部分點(diǎn)擊,記得要為TextView
設(shè)置movementMethod
冈敛。
2.在TextView
中實(shí)現(xiàn)完全點(diǎn)擊
這個(gè)只需要為textview
設(shè)置監(jiān)聽(tīng)器就行待笑,由于我是在之前的代碼中直接加入的,然后當(dāng)我點(diǎn)擊我之前設(shè)置的部分點(diǎn)擊的區(qū)域時(shí)抓谴,發(fā)現(xiàn)是先調(diào)用
clickablespan
中的onclick()
暮蹂,然后是onclicklistener
中的onclick(),而點(diǎn)擊電話的鏈接時(shí)癌压,是直接跳轉(zhuǎn)到撥打電話的頁(yè)面仰泻,即不會(huì)調(diào)用
clickablespan
中的onclick()方法,也不會(huì)調(diào)用onclicklistener
中的onclick()方法滩届,因?yàn)闆](méi)有打印出這兩個(gè)方法中的輸出語(yǔ)句集侯。同時(shí)這里有一點(diǎn)
需要提一下,如果這時(shí)你在xml文件中聲明android:clickable="false"
, android:linksClickable="false"
帜消,這時(shí)你會(huì)發(fā)現(xiàn)棠枉,無(wú)論是自己設(shè)置的
部分區(qū)域,亦或是電話的鏈接泡挺,還是textview
中的任何地方辈讶,都是可以點(diǎn)擊的。這是因?yàn)闊o(wú)論是setOnClickListener
會(huì)強(qiáng)制改變clickable
屬性粘衬,
而myTextView.setMovementMethod(LinkMovementMethod.getInstance())
;會(huì)改變android:linksclickable
的屬性(這里得提一點(diǎn)荞估,如果你將
myTextView.setMovementMethod(LinkMovementMethod.getInstance())
代碼去掉,然后設(shè)置android:linksclickable="true"
,這時(shí)就會(huì)有一個(gè)有趣的
現(xiàn)象稚新,若textview
的值中有phone
勘伺,web
之類的,那么無(wú)論是自己設(shè)置的區(qū)域還是phone褂删,web都可以點(diǎn)擊品追,若是沒(méi)有phone澈蚌,web之類的,那么自己設(shè)置的
區(qū)域就無(wú)法點(diǎn)擊,感覺(jué)是android:linksclickable="true"
屬性是對(duì)于android:autolink
而設(shè)置的睁壁,若textview
中的內(nèi)容存在這些锣光,則會(huì)讓linksclickable
設(shè)置為true捏卓,否則不會(huì)丛忆。),所以都可以點(diǎn)擊盖袭。如果你將setonclicklistener()
去掉失暂,然后設(shè)置android:linksClickable="true"
彼宠,android:clickable="false"
,
發(fā)現(xiàn)自己設(shè)置的區(qū)域和電話依然可以點(diǎn)擊弟塞。
結(jié)論:為TextView設(shè)置完全點(diǎn)擊時(shí)凭峡,為TextView
設(shè)置onclicklistener
監(jiān)聽(tīng)器,若同時(shí)還有部分點(diǎn)擊决记,以及電話摧冀。那么當(dāng)點(diǎn)擊設(shè)置的部分點(diǎn)擊區(qū)域
時(shí),先運(yùn)行clickablespan
中的onclick()系宫,然后是onclicklistener
中的onclick()索昂,若點(diǎn)擊電話的鏈接,是直接跳轉(zhuǎn)到撥打電話的頁(yè)面笙瑟,即不會(huì)調(diào)用
clickablespan
中的onclick()方法楼镐,也不會(huì)調(diào)用onclicklistener
中的onclick()方法。同時(shí)setOnClickListener
會(huì)強(qiáng)制改變clickable
屬性往枷,
而myTextView.setMovementMethod(LinkMovementMethod.getInstance())
;會(huì)改變android:linksclickable
的屬性(這里得提一點(diǎn),如果你將
myTextView.setMovementMethod(LinkMovementMethod.getInstance())
代碼去掉凄杯,然后設(shè)置android:linksclickable="true"
,這時(shí)就會(huì)有一個(gè)有趣的
現(xiàn)象错洁,若textview
的值中有phone,web之類的戒突,那么無(wú)論是自己設(shè)置的區(qū)域還是phone屯碴,web都可以點(diǎn)擊,若是沒(méi)有phone膊存,web之類的导而,那么自己設(shè)置的
區(qū)域就無(wú)法點(diǎn)擊,感覺(jué)是android:linksclickable="true"
屬性是對(duì)于android:autolink
而設(shè)置的隔崎,若textview
中的內(nèi)容存在這些今艺,則會(huì)讓linksclickable
設(shè)置為true,否則不會(huì)爵卒。)虚缎。