TextView同时实现超链接和复制粘贴功能引出的问题

在项目中,可能会用到TextView的超链接和复制粘贴的功能,实现方式:

       

当两者同时使用的时候,并且textview中的文本是多个超链接时,点击时就会出现问题

现象是:点击第一个超链接动作是正常的,当点击第二个超连接时,响应的动作是第一个超链接。当再次点击第一个链接时,响应的动作是第二个超链接。

关于这个其实可以看做是一个SDK本身的Bug。textView设置超链接,其实是调用

TextView.setMovementMethod(MovementMethod movement)

给TextView设置了LinkMovementMethod,实现点击效果,如果不明白LinkMovementMethod的作用,自行百度。

当TextView在实现复制粘贴时,通过查看TextView的源码,发现Method被改变了·······

 public void setTextIsSelectable(boolean selectable) {
        if (!selectable && mEditor == null) return; // false is default value with no edit data

        createEditorIfNeeded();
        if (mEditor.mTextIsSelectable == selectable) return;

        mEditor.mTextIsSelectable = selectable;
        setFocusableInTouchMode(selectable);
        setFocusable(FOCUSABLE_AUTO);
        setClickable(selectable);
        setLongClickable(selectable);

        // mInputType should already be EditorInfo.TYPE_NULL and mInput should be null

        setMovementMethod(selectable ? ArrowKeyMovementMethod.getInstance() : null);  <-----这里
        setText(mText, selectable ? BufferType.SPANNABLE : BufferType.NORMAL);

        // Called by setText above, but safer in case of future code changes
        mEditor.prepareCursorControllers();
    }

为了避免上面的现象,我采用的做法是,在xml中只设置超链接

       

然后在代码中

textView.setTextIsSelectable(true)
textView.movementMethod = LinkMovementMethod.getInstance()

这样就可以解决这个问题了。

你可能感兴趣的:(TextView同时实现超链接和复制粘贴功能引出的问题)