gpt4 book ai didi

android - 在另一个 Activity 中打开 TextView 链接,而不是默认浏览器

转载 作者:IT王子 更新时间:2023-10-28 23:37:12 25 4
gpt4 key购买 nike

将带有 autoLinkMask 的 textView 设置为 Linkify.ALL,我可以打开链接并且浏览器会显示网页。

我需要调用另一个 Activity 来完成它的 webView 而不离开应用程序。

重要提示:

  • 更改 textView 内容不是一种选择,我需要将链接与他们拥有的方案一样显示,
  • textView 中有很多文字,不只是链接。

我查看了 movementMethodIntentFilters,可能会遗漏一些东西,但看起来无济于事。

那么,有什么选项可以拦截 TextView 中的触摸链接以对其进行操作而不打开浏览器?

如果要提this所以问题,请给出一些论据,为什么它似乎没有解决与我相同的问题。

最佳答案

第 1 步:创建您自己的 ClickableSpan 子类,在其 onClick() 方法中执行您想要的操作(例如,称为 YourCustomClickableSpan )

第 2 步:将所有 URLSpan 对象批量转换为 YourCustomClickableSpan 对象。我有一个实用程序类:

public class RichTextUtils {
public static <A extends CharacterStyle, B extends CharacterStyle> Spannable replaceAll(Spanned original,
Class<A> sourceType,
SpanConverter<A, B> converter) {
SpannableString result=new SpannableString(original);
A[] spans=result.getSpans(0, result.length(), sourceType);

for (A span : spans) {
int start=result.getSpanStart(span);
int end=result.getSpanEnd(span);
int flags=result.getSpanFlags(span);

result.removeSpan(span);
result.setSpan(converter.convert(span), start, end, flags);
}

return(result);
}

public interface SpanConverter<A extends CharacterStyle, B extends CharacterStyle> {
B convert(A span);
}
}

你会这样使用它:

yourTextView.setText(RichTextUtils.replaceAll((Spanned)yourTextView.getText(),
URLSpan.class,
new URLSpanConverter()));

使用自定义 URLSpanConverter 像这样:

class URLSpanConverter
implements
RichTextUtils.SpanConverter<URLSpan, YourCustomClickableSpan> {
@Override
public URLSpan convert(URLSpan span) {
return(new YourCustomClickableSpan(span.getURL()));
}
}

将所有 URLSpan 对象转换为 YourCustomClickableSpan 对象。

关于android - 在另一个 Activity 中打开 TextView 链接,而不是默认浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413399/

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