TextView 中点击的单词清晰焦点

问题描述 投票:0回答:1

我正在使用自定义的

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);
}
android onclick textview focus motionevent
1个回答
0
投票

一个很晚的答案,但希望它仍然可以帮助某人。

这些是我的发现(compileSdk/targetSdk 33,在 API 33 上运行):

    如果在
  • invalidate()
     块中调用,则 
    TextView
     上的 
    view.post{}
    可以工作,但如果在未先点击链接外部的情况下第二次单击,链接将不会再次突出显示。
  • 如果在
  • view.isVisible = false; view.isVisible = true
     块中调用,则 
    TextView
     上的 
    view.post{}
    可以工作,但如果在未先点击链接外部的情况下第二次单击,链接将不会再次突出显示。
  • Spannable
    上使用新的
    TextView
    设置相同的文本会删除突出显示,并且在第二次单击时也可以工作。

即使有可聚焦的父母或兄弟姐妹,我也无法让clearFocus()工作。

© www.soinside.com 2019 - 2024. All rights reserved.