Android跳转TextView中的超链接并拦截点击事件

可跳转可拦截点击事件

public class DeepLinkActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_deeplink);

        TextView textView = findViewById(R.id.textview);
        textView.setText(getClickableHtml("<a href='scbeasysim://purchase/01219ef3-f8ab-82e5-ba03-a876d88d0263'>前往 SCB 支付</a>"));
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }

    /**
     * 格式化超链接文本内容并设置点击处理
     */
    private CharSequence getClickableHtml(String html) {
        Spanned spannedHtml = Html.fromHtml(html);
        SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
        URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
        for (final URLSpan span : urls) {
            setLinkClickable(clickableHtmlBuilder, span);
        }
        return clickableHtmlBuilder;
    }

    /**
     * 设置点击超链接对应的处理内容
     */
    private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) {
        int start = clickableHtmlBuilder.getSpanStart(urlSpan);
        int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
        int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);

        ClickableSpan clickableSpan = new ClickableSpan() {
            public void onClick(View view) {
                Log.i(LianConstants.TAG, "URL: " + urlSpan.getURL());
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlSpan.getURL()));
                DeepLinkActivity.this.startActivity(intent);
            }
        };

        // The original URLSpan needs to be removed to block the behavior of browser opening
        clickableHtmlBuilder.removeSpan(urlSpan);
        clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
    }
}

可跳转但不能拦截点击事件

public class DeepLinkActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_deeplink);

        TextView textView = findViewById(R.id.textview);
        textView.setText(getClickableHtml("<a href='scbeasysim://purchase/01219ef3-f8ab-42e5-ba03-a474d88d0263'>前往 SCB 支付</a>"));
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }

    /**
     * 格式化超链接文本内容并设置点击处理
     */
    private CharSequence getClickableHtml(String html) {
        Spanned spannedHtml = Html.fromHtml(html);
        SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
        URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
        for (final URLSpan span : urls) {
            setLinkClickable(clickableHtmlBuilder, span);
        }
        return clickableHtmlBuilder;
    }

    /**
     * 设置点击超链接对应的处理内容
     */
    private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) {
        int start = clickableHtmlBuilder.getSpanStart(urlSpan);
        int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
        int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);

        ClickableSpan clickableSpan = new ClickableSpan() {
            public void onClick(View view) {
                Log.i(LianConstants.TAG, "URL: " + urlSpan.getURL());

            }
        };

        clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
    }
}
上一篇 H5唤起App技术DeepLink方案总结
下一篇 使用pm2部署vue项目
目录
文章列表
1 RadioButton在Android 4.4及以下调用setButtonDrawable(null)无效的问题
RadioButton在Android 4.4及以下调用setButtonDrawable(null)无效的问题
2
高中数学基础:集合与函数
高中数学基础:集合与函数
3
Lombok Builder构造器默认值失效
Lombok Builder构造器默认值失效
4
RocketMQ延时消息
RocketMQ延时消息
5
MySQL 5.7 - 通过 BINLOG 恢复数据
MySQL 5.7 - 通过 BINLOG 恢复数据
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。