android 超链接 点击时改变背景色 类似google+效果如何实现

from g+

如图点击后会修改超链接背景颜色为蓝色,松手时恢复。
1、我继承了ClickableSpan,重写onClick方法,在这里获取到点击事件后打开游览器。
问题一:这个事件只有在抬起时才获取,如何在按下时获取从而改变背景色
问题二:这种实现方式引发了很多TextView点击事件问题,还有什么其他很好的实现方式

  
public class LinkClickSpan extends ClickableSpan {
public LinkClickSpan() {
super();
}

@Override
public void updateDrawState(TextPaint ds) {
// ds.setColor(ds.linkColor);
// ds.setUnderlineText(false);

}

@Override
public void onClick(View widget) {
Context context = widget.getContext();
TextView tv = (TextView) widget;
tv.setOnClickListener(null);
int start = tv.getSelectionStart();
int end = tv.getSelectionEnd();

SpannableStringBuilder spanString = TextViewUtils
.replaceLinkBgColorByIndex(context, tv);
tv.setText(spanString);
String str = spanString.subSequence(start, end).toString();
if (str.startsWith("www")) {
str = "http://" + str;
}
Uri uri = Uri.parse(str);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
context.startActivity(intent);
}

}
评论 (0)链接2012-08-21 

已解决 通过监听TextView的touch事件,按下时替换连接的背景色
因为可能存在文本和链接交替存在的情况,所以要计算当前按下的位置( event.getX)在哪个连接之上

  
主要通过 Layout localLayout = v.getLayout()的Layout对象来计算
int lineNum = localLayout.getLineForVertical(i4);//line num
int start = localLayout.getLineStart(lineNum);
int end = localLayout.getLineEnd(lineNum);
int offsetX = localLayout.getOffsetForHorizontal(i6, x);
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-11-08
  • 0 支持
    你好,能不能提供下源代码, 参考下。 – uu1r1cl 2014-03-03
德问是一个专业的编程问答社区,请 登录注册 后再提交答案