SpannableString spannableString = new SpannableString("Hello Android");

spannableString.setSpan(
        new ClickableSpan() {
            @Override
            public void onClick(@NonNull View view) {
                Toast.makeText(SpannableStringTestActivity.this, "点击了 Hello", Toast.LENGTH_SHORT).show();
            }
        },
        0, 5,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
);

TextView tvContent = findViewById(R.id.tv_content);
tvContent.setText(spannableString);
  • 在 Android 开发中,执行上述代码,ClickableSpan 的点击事件没有生效
问题原因
  • TextView 默认不会处理 ClickableSpan 的点击事件,需要显式启用
处理策略
  • 设置 LinkMovementMethod,TextView 才会拦截点击事件,并分发给对应的 ClickableSpan
// 关键

tvContent.setMovementMethod(LinkMovementMethod.getInstance());
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐