上一篇文章解决了UrlSpan与文本中url链接识别和设置的问题,超链接可以正常显示了。但由于用户期望TextView中的文章内容可以自由复制,这个需求嘛实现起来就是设置下textView.setTextIsSelectable(true)就可以了。
天真的以为没啥问题,版本转测。立马出现一个严重问题,第一次点击超链接打开的网址与实际不符,第二次点击超链接才能打开正确的网址,或者说每次点击超链接文本打开的网址都是上一次点击区域内的超链接url。
贴TextView::onTouchEvent的源码
01 |
@Override |
02 |
public boolean onTouchEvent(MotionEvent event) {
|
03 |
。。。 |
04 |
final boolean superResult = super .onTouchEvent(event); |
05 |
if ((mMovement != null || onCheckIsTextEditor()) && isEnabled() |
06 |
&& mText instanceof Spannable && mLayout != null ) {
|
07 |
boolean handled = false ; |
08 |
09 |
if (mMovement != null ) {
|
10 |
handled |= mMovement.onTouchEvent( this , (Spannable) mText, event); |
11 |
} |
12 |
13 |
if (touchIsFinished && mLinksClickable && mAutoLinkMask != 0 && mTextIsSelectable) {
|
14 |
// The LinkMovementMethod which should handle taps on links has not been installed |
15 |
// on non editable text that support text selection. |
16 |
// We reproduce its behavior here to open links for these. |
17 |
ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(), |
18 |
getSelectionEnd(), ClickableSpan. class ); |