Poniższy kod przedstawia sposób stosowania naciśniętego stanu za pomocą niestandardowej opcji ClickableSpan i selektora. Jednak naciśnięty stan jest stosowany zawsze, gdy naciśniesz w dowolnym miejscu na TextView, a nie tylko na ClickableSpan. Jak mogę to zatrzymać?Sposób korzystania z obiektu ClickableSpan, ale ignorowanie kliknięć z poziomu TextView
Uwaga: to nie wymagaonClick
, ale ma zastosowaniastate_pressed
z selektora. Chcę, żeby to nie było.
MyView.java
SpannableString spanned = new SpannableString("click here");
spannable.setSpan(new MyClickableSpan() {
@Override
public void onClick(View widget) {
doSomething();
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spanned);
textView.setMovementMethod(LinkMovementMethod.getInstance());
MyClickableSpan.java
public abstract class MyClickableSpan extends ClickableSpan {
@Override
public abstract void onClick(View view);
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
TextView
<TextView
android:id="@+id/my_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textColorLink="@color/my_selector" />
my_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/my_color_pressed" />
<item android:color="@color/my_color" />
</selector>
Edit uwaga: kod Dodany TextView
pokazać kod gdzie ustawić swoją ClickableSpan do TextView –
Czy próbowałeś mojego rozwiązanie? –
@Fifer Sheep, może być u szukasz tego rozwiązania. http://stackoverflow.com/questions/20856105/change-the-text-color-of-a-single-clickablespan-when-pressed-without-affecting-o – TheGreat004