SpannableStringspannableString=newSpannableString("Hello Android");spannableString.setSpan(newClickableSpan(){@OverridepublicvoidonClick(@NonNullViewview){Toast.makeText(SpannableStringTestActivity.this,"点击了 Hello",Toast.LENGTH_SHORT).show();}},0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);TextViewtvContent=findViewById(R.id.tv_content);tvContent.setText(spannableString);- 在 Android 开发中,执行上述代码,ClickableSpan 的点击事件没有生效
问题原因
- TextView 默认不会处理 ClickableSpan 的点击事件,需要显式启用
处理策略
- 设置 LinkMovementMethod,TextView 才会拦截点击事件,并分发给对应的 ClickableSpan
// 关键tvContent.setMovementMethod(LinkMovementMethod.getInstance());