web-dev-qa-db-ja.com

clickablespanクリックでハイライト

問題はほとんどありません。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();
    }
}

これがテキストビューでの使用方法です

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);

スパナブルオブジェクトの「onclickhighlight」をカスタマイズする方法を知っている人はいますか?

編集:応答をありがとうAleadam、私はupdateDrawStateをオーバーライドしています(私のInternalClickableSpanクラスの最初のメソッドを見てください)が、とにかくこのハイライトをカスタマイズする方法を見つけることができません。誰か他のアイデアがありますか?ありがとう

29
Robert

次のようにonClick(View widget)をオーバーライドできます。

        @Override
        public void onClick(View widget) {
            // do what must happen after click event.
            widget.invalidate();
        }
19
hasanghaforian

これにより、ハイライトが削除されます。

tv.setHighlightColor(Color.TRANSPARENT);
16
Tuss

enter image description here

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());
6
Phan Van Linh

これを使ってください。

view.setSelector(new ColorDrawable(Color.TRANSPARENT));
1
Sunil Pandey

uはデフォルトのhighlightColorを置き換えることができますAndroid:textColorHighlight

    <TextView
    Android:id="@+id/tv_tip"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:textColor="#727998"
    Android:textColorHighlight="@Android:color/transparent"
    tools:text="@string/_tip" />

またはフォーカスを無効にする

0
act262
<?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>
0
Android3