在开发过程中有时候需要实现TextView部分文字的点击效果,实现该功能可以自定义文本控件,也可以用android源生api实现
1、SpannableString是CharSequence接口的实现类,同时它也实现了Spannable接口;
①SpannableString通过setSpan方法可以设置TextView文本的各种样式,包括文本中插入图片(ImageSpan),前景色(ForegroundColorSpan),背景色(BackgroundColorSpan)等
②SpanableString也可以通过设置ClickableSpan设置某一些文字可以被点击
③复写ClickableSpan中的方法
ClickableSpan click = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(OptionalInfoActivity.this, "该功能尚未实现", Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { ds.setUnderlineText(false); ds.clearShadowLayer(); ds.setColor(getResources().getColor(R.color.custom_blue)); ds.setStrokeMiter(3); } };
④
SpannableString spannable = new SpannableString(text); ClickableSpan click = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(OptionalInfoActivity.this, "该功能尚未实现",Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { ds.setUnderlineText(false); ds.clearShadowLayer(); ds.setColor(Color.RED); } }; spannable.setSpan(click,start,end,SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
TextView.setText(spannable);
api文档中说道If an object of this type is attached to the text of a TextView with a movement method of LinkMovementMethod, the affected spans of text can be selected. If clicked, the onClick(View)
method will be called.
故还必须给这个TextView设置 TextView.setMovementMethod(LinkMovementMethod.getInstance());