Мне нужно вставлять текст с текстом в текст абзаца, clickablespan может это сделать. Но вместо того, чтобы использовать стиль фокуса/пресса/нефокус по умолчанию, могу ли я изменить этот стиль? Как и при фокусе, цвет фона синий, цвет текста белый, когда нефокус, цвет фона белый, цвет текста синий.
Могу ли я изменить внешний вид clickablespan
Ответ 1
Вот пример
bottomMsg = (TextView) findViewById(R.id.bottom_msg);
int start = bottomMsg.getText().toString().indexOf(terms);
MovementMethod movementMethod = LinkMovementMethod.getInstance();
bottomMsg.setMovementMethod(movementMethod);
Spannable text = (Spannable) bottomMsg.getText();
//TermAndConditions is a clickableSpan.
text.setSpan(new TermAndConditions(), start, start + terms.length(), Spannable.SPAN_POINT_MARK);
text.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.customYellowColor)), start, start + terms.length(), 0);
Дело в том, что цветовой охват после кликабельного диапазона. в противном случае цвет не изменился.
Ответ 2
Вы можете переопределить метод updateDrawState
ClickableSpan
:
SpannableString spannableString = new SpannableString("text");
spannableString.setSpan(
new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getContext(), "Click!", Toast.LENGTH_LONG).show();
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(getResources().getColor(R.color.link));
}
}, 0, 4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());