我正在使用自定义的
LinkMovementMethod
类来自定义我的文本 onClick
,效果很好,但当它单击 Clickable
单词时,它仍然按显示
我怎样才能释放它
这也是我使用的自定义类
public abstract class TextViewLinkHandler extends LinkMovementMethod {
private String text;
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_UP)
return super.onTouchEvent(widget, buffer, event);
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);
URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
CharSequence charSequence = widget.getText();
if (charSequence instanceof Spannable) {
Spannable spannableText = (Spannable)charSequence;
ClickableSpan[] spans = spannableText.getSpans(0, widget.length(), ClickableSpan.class);
for (ClickableSpan span55555 : spans) {
int start55555 = spannableText.getSpanStart(span55555);
int end55555 = spannableText.getSpanEnd(span55555);
Log.i("tessst", String.valueOf(charSequence.subSequence(start55555, end55555)));
text = String.valueOf(charSequence.subSequence(start55555, end55555));
}
}
if (link.length != 0) {
onLinkClick(link[0].getURL(),TextViewLinkHandler.this.text);
widget.invalidate();
}
return true;
}
abstract public void onLinkClick(String url,String text);
}
一个很晚的答案,但希望它仍然可以帮助某人。
这些是我的发现(compileSdk/targetSdk 33,在 API 33 上运行):
invalidate()
块中调用,则
TextView
上的
view.post{}
可以工作,但如果在未先点击链接外部的情况下第二次单击,链接将不会再次突出显示。view.isVisible = false; view.isVisible = true
块中调用,则
TextView
上的
view.post{}
可以工作,但如果在未先点击链接外部的情况下第二次单击,链接将不会再次突出显示。Spannable
上使用新的 TextView
设置相同的文本会删除突出显示,并且在第二次单击时也可以工作。即使有可聚焦的父母或兄弟姐妹,我也无法让clearFocus()工作。