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

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

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="all" // 实现所有超链接

android:textIsSelectable="true"// 实现复制粘贴

/>

当两者同时使用的时候,并且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中只设置超链接

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="all" // 实现所有超链接

/>

然后在代码中

textView.setTextIsSelectable(true)

textView.movementMethod = LinkMovementMethod.getInstance()

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值