在Linkify#addLinks(Spannable, Int) 的javadoc 中提到:
...如果掩码不为零,它还会删除任何附加到 Spannable 的现有 URLSpans,以避免在同一文本上重复调用它时出现问题。
虽然在您使用的Linkify#addLinks(TextView, Int) 中没有提到它,但似乎它们遵循相同的行为并且现有链接(即您问题中的“锚标记”)将在链接之前被删除。
要解决并保留现有链接(在您的情况下为“锚标记”),您需要备份现有跨度(即 TextView#getText --> 转换为跨度 --> 使用 Spanned#getSpans 列出现有链接 -->使用Spanned#getSpanStart 和Spanned#getSpanEnd 和Spanned#getSpanFlags 检索每个的设置)
链接后,重新添加跨度(即TextView#getText --> 转换为Spannable --> 使用Spannable#setSpan 重新添加链接 --> 将Spannable 设置回TextView#setText )
根据您的情况,您可能还需要检查重叠的“锚标签”和“链接链接”并进行相应调整...
如您所见,这是相当乏味、复杂且容易出错的代码。为了简化事情,我只是将所有这些合并到Textoo 库中以供重用和共享。使用 Textoo,您可以通过以下方式实现相同目的:
TextView myTextView = Textoo
.config((TextView) findViewById(R.id.view_location_disabled))
.linkifyWebUrls()
.apply();
Textoo 将保留现有链接并链接所有不重叠的网址。