gpt4 book ai didi

android - 扩大 ClickableSpan 的触摸区域

转载 作者:太空狗 更新时间:2023-10-29 13:46:24 28 4
gpt4 key购买 nike

我有一个 TextView,我在其中设置了 HTML 文本。这篇文章有很多链接。当您点击一个链接时,它并不总是触发 onClick 方法。因此,我正在尝试扩展 ClickableSpan 的区域,以便它始终响应。

int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
final ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
getTouchActions(span.getURL());
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);

最佳答案

CustomMovementMethod 必须扩展 ScrollingMovementMethod 并覆盖 onTouchEvent 方法。为了添加一些额外的空间,您必须在维度中定义它并在开始/结束跨度中使用它。

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

int startSpan = off - context.getResources().getDimension(R.dimen.extra_space_start);
int endSpan = off + context.getResources().getDimension(R.dimen.extra_space_end);

ClickableSpan[] link = buffer.getSpans(startSpan, endSpan, 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);
}
}

return super.onTouchEvent(widget, buffer, event);

您可以这样调用您的自定义链接移动:

textView.setMovementMethod(new CustomLinkMovementMethod(context));
textView.setLinksClickable(true);

关于android - 扩大 ClickableSpan 的触摸区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26180129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com