Android - 仅启用 URL link,但在触及 TextView 中的某些内容时禁用其他 non-URL link

Android - Enabling only URL link, but disabling the others when it touches something non-URL link in TextView

我正在实施一个董事会。我想要用户可以包含 links.

的视图

现在,我的 TextView 有

android:autoLink="web"

属性。但是,它的工作方式与我的预期有点不同。

如您所见,即使我单击空白区域(图片中的+行),TextView 也会检测到 link(蓝色突出显示),如果我松开手指,网络浏览器打开并转到 URL.

那不是我想要的。我只希望它在我只单击 link 时工作。 (不是其他 non-URL 文字,也不是空白区域)

  1. 我不知道用户写了什么,换句话说,我不能预设具体的 links 也不能猜测 URLs 会是什么。它必须应用于所有 link,即使我不知道。

  2. link的个数可以超过一个。而且我不知道用户的内容会包含多少link

有人告诉我需要使用 WebView 才能达到 HTML。那么,我真的只有那个选择吗?因为我不认为Kakaotalk、Whatsapp、Wechat、Telegram,甚至Instagram等很多聊天室都是WebView做的。

如果我想把图片放在文字中间怎么办?我想用 TextView 是不可能的。怎么做到的?

您需要以编程方式处理链接。这样您就可以将可点击的范围和不可点击的范围分开。如果需要,您可以在单击 span 时添加更多代码。

以下是您可以使用的方式

private void createUrlSpansInTextView(TextView tv, String text) {
  tv.setText(text); // Or you can remove this line if you already set text to textview
  SpannableString current=(SpannableString)tv.getText();
  URLSpan[] spans=
      current.getSpans(0, current.length(), URLSpan.class);

  for (URLSpan span : spans) {
    int start=current.getSpanStart(span);
    int end=current.getSpanEnd(span);

    current.removeSpan(span);
    current.setSpan(new CustomURLSpan(span.getURL()), start, end,
                    0);
  }
}

其中 CustomURLSpan

private static class CustomURLSpan extends URLSpan {
  public CustomURLSpan(String url) {
    super(url);
  }

  @Override
  public void onClick(View widget) {
      // Write your code to load urls
  }
}

What if I want to place pictures in the middle of text? I guess it is impossible with TextView. How to make it?

不可以使用 TextView。您需要寻找第三方库。我不确定是否存在。