Tengo un Spannable Object
avec un Clickable Object
de l'entreprise. Lorsque le Spannable String
s'affiche dans l'écran TextView
il comporte un texte bleu et un soulignement bleu (indiquant à l'utilisateur que ce texte est cliquable). Mon problème est de savoir comment empêcher l'apparition du soulignement bleu dans le texte. TextView
?
Réponses
Trop de publicités?
Azhagthott
Points
357
Sur la base de la réponse de @ Sai Gopi Me
en Kotlin :
val clickableSpan: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
// some action here
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.isUnderlineText = false
}
}
}
dcow
Points
2921
Pradeep Gupta
Points
1080
Try the below code to remove underlined and clicked event on multiple words in textview :
String str="Angelina Clapped For Lester Kang";
Spannable span = Spannable.Factory.getInstance().newSpannable(str);
// 0 to 8 start and index of Angelina
span.setSpan(new ClickableSpan(str), 0, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 21 to 32 start and index of Lester Kang
span.setSpan(new ClickableSpan(str), 21, 32, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(span);
class ClickableSpan extends ClickableSpan{
String clicked;
public ClickableSpan (String string) {
super();
}
public void onClick(View v) {
Toast.makeText(MyActivity.this,""+((TextView)v).getText().toString(),Toast.LENGTH_SHORT).show();
}
public void updateDrawState(TextPaint ds) {
// override updateDrawState
ds.setUnderlineText(false); // set to false to remove underline
}
}
Erik Terwan
Points
11
La réponse d'ANURAG RASTOGI m'a sauvé la mise ! J'ai déjà un SpannableString
sur lequel je voulais appliquer un ClickableSpan
:
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// Do something...
}
// Prevent
// ds.setColor(ds.linkColor);
// ds.setUnderlineText(true);
// in: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/text/style/ClickableSpan.java
// from executing.
@Override
public void updateDrawState(@NonNull TextPaint ds) {
// super.updateDrawState(ds);
}
},0, spannableString.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
En updateDrawState
remplace l'option updateDrawState
en el ClickableSpan
dans Android, et en n'appelant pas la classe super.updateDrawState
il ne sera pas exécuté.
Tous les formats de texte déjà présents dans spannableString
seront préservées.
ANURAG RASTOGI
Points
1
- Réponses précédentes
- Plus de réponses