突出显示clickablespan点击

Rob*_*ert 28 android highlight

我没有什么问题,我需要在点击clickablespan时删除或自定义这个橙色突出显示.这是我的类,扩展了ClickableSpan

public class InternalClickableSpan extends ClickableSpan {

    private String clicked;

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(false);
    }

    public InternalClickableSpan(String clickedString) {
        clicked = clickedString;
    }

    @Override
    public void onClick(View view) {
        Selection.setSelection((Spannable) ((TextView)view).getText(), 0);
        Toast toast = Toast.makeText(mContext, clicked, Toast.LENGTH_SHORT);
        toast.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在文本视图中使用它的方式

Spannable spans = (Spannable) tv.getText();      
spans.setSpan(new InternalClickableSpan(contacts[i]), text.indexOf(contacts[i]),   text.indexOf(contacts[i])+contacts[i].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

有人知道如何在spannable对象上自定义"onclick highlight"吗?

编辑:感谢Aleadam的回复,我重写了updateDrawState(请看看我的InternalClickableSpan类中的第一个方法),但我无法找到一种方法来自定义这个higlight.有没有人有其他想法?谢谢

has*_*ian 20

您可以onClick(View widget)像这样覆盖:

        @Override
        public void onClick(View widget) {
            // do what must happen after click event.
            widget.invalidate();
        }
Run Code Online (Sandbox Code Playgroud)


Tus*_*uss 16

这将删除任何突出显示.

tv.setHighlightColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)


Pha*_*inh 6

在此处输入图片说明

ClickableSpan linkClick = new ClickableSpan() {
    @Override
    public void onClick(View view) {
        Toast.makeText(getApplicationContext(), "Link Click",
                Toast.LENGTH_SHORT).show();
        view.invalidate();
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        if (textView.isPressed()) {
            ds.setColor(Color.BLUE);
        } else {
            ds.setColor(Color.RED);
        }
        textView.invalidate();
    }
};
textView.setHighlightColor(Color.TRANSPARENT);

Spannable spannableString = new SpannableString("Link in TextView");
spannableString.setSpan(linkClick, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)

  • 多个可点击跨度怎么样? (2认同)

小智 0

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout android:id="@+id/LinearLayout02"
        android:layout_height="50px"
        android:layout_width="fill_parent"
        // Layout Click enable
        android:clickable="true"
        // Setting Highlight Option in background property
        android:background="@android:drawable/list_selector_background" />
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)