Могу ли я изменить внешний вид 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());