永发信息网

TextView怎么才能使URLSpan部分和非URLSpan部分分别响应

答案:1  悬赏:70  手机版
解决时间 2021-02-18 17:18
TextView怎么才能使URLSpan部分和非URLSpan部分分别响应
最佳答案
你可以参考 LinkMovementMethod 写一个 自定义的 LinkMovementMethod。
主要的处理是在 onTouchEvent 时,当找不到ClickableSpan事件,则调用 你传进来的 listener 事件。
然后 textview 调用setMovementMethod(),传入自定义的LinkMovementMethod就好了。
[mw_shl_code=java,true] @Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction();

if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();

x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();

x += widget.getScrollX();
y += widget.getScrollY();

Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);

ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer, buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
}

return true;
} else {
Selection.removeSelection(buffer);
if (action == MotionEvent.ACTION_UP && listener != null) {
listener.onTextClicked();
}
}
}

return super.onTouchEvent(widget, buffer, event);
}
[/mw_shl_code]
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
苏打粉刷牙真的有用吗
高密市柏城镇何家村村民委员会地址有知道的么
患者,女,26岁,已婚。分娩时失血较多,产后
不是说农民和市民同等待遇,低保为什么不一样?
1992年6月29日属猴人的命运
期货LLDPE交割的是啥牌号的?
有14点多不到15点从长春到北京站的火车吗?
隆回县对外经济贸易行业管理局地址在哪,我要
2012年深圳有哪些展会?
关于黑夜比较优美的词句!!~~
听渔轩国际渔具钓具连锁在哪里啊,我有事要去
求建议,我们是从小一起长大的好朋友
春日货运地址在什么地方,想过去办事,
快易购超市地址在什么地方,想过去办事
简历一定要用证件照么
推荐资讯
惠州干猪粪多少钱一立方
布布高升窗帘馆地址在什么地方,想过去办事
韩式纹绣(市直小区东)这个地址在什么地方,我
王记笋子面地址在哪,我要去那里办事
再回首零距离烫染工作室怎么去啊,有知道地址
UG4.0 如是画好的草图一个椭圆形.如果要整个
出现以上心电图变化最可能的原因为A.心衰控制
南京驰力汽车传动装置有限公司的电话是多少
负十五除以(三分之一减一又二分之一减三)乘
在水泥地上挖掘了几个树坑,栽进去了李子,桃
仙侠第一放置境界升级200载是什么意思
求助大神,罗技m558蓝牙鼠标win10系统经常失
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?