我可以改变clickablespan的外观和感觉

use*_*316 17 android coding-style textview

我必须在段落文本中嵌入可点击的文本,clickablespan可以做到这一点.但是,我可以更改这些样式,而不是使用默认的焦点/按下/非焦点样式吗?喜欢焦点时,背景颜色为蓝色,文字颜色为白色,不聚焦时,背景颜色为白色,文字颜色为蓝色.

小智 23

这是一个例子

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);
Run Code Online (Sandbox Code Playgroud)

关键是,颜色跨度是在可点击范围之后.否则,颜色没有改变.


bry*_*410 18

您可以覆盖以下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());
Run Code Online (Sandbox Code Playgroud)


Pav*_*vel 5

链接颜色可以在xml中更改:

<TextView
    android:textColor="..."
    android:textColorLink="..." />
Run Code Online (Sandbox Code Playgroud)