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

发布于 2016-11-10 07:54:58 字数 1480 浏览 1242 评论 1

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);
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2017-07-13 16:50:24

已解决 通过监听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);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文