首先,我们使用到的是CharSequence的子类SpannableString类
在这个类中有这样一个
TestActivity.java
public class TestActivity extends AppCompatActivity {
private TextView textView;
private String message = "我们使用到的是我们使用到的是我们使用到的是";
private SpannableString spanAbleInfo;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
textView = (TextView) findViewById(R.id.textView);
spanAbleInfo = new SpannableString(message);
spanAbleInfo.setSpan(new CommonClickableSpan(),0,3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(spanAbleInfo);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(getResources().getColor(android.R.color.transparent));
}
}
CommonClickableSpan.java
public class CommonClickableSpan extends ClickableSpan implements View.OnClickListener {
@Override
public void onClick(View widget) {
Log.i(getClass().getSimpleName(),"text view is clicked");
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
ds.clearShadowLayer();
ds.setColor(Color.RED);
}
}
写到这里,其实很多地方已经没问题,而上次我记录了,有一个地方有一个坑,记得要注意,就是如果这个CommonClickableSpan类只继承了ClickableSpan类,那么内部的onClick方法只能接受一次,而想每次点击都有效,就要继承OnClickListener接口,还有就是别忘记了添加textView.setMovementMethod(LinkMovementMethod.getInstance());