Ich habe eine Spannable Object
mit einer Clickable Object
eingestellt. Wenn die Spannable String
in der TextView
angezeigt wird, hat es blauen Text und eine blaue Unterstreichung (zeigt dem Benutzer an, dass dieser Text anklickbar ist). Mein Problem ist, wie kann ich verhindern, dass die blaue Unterstreichung in TextView
erscheint?Wie die Unterstreichung in einem spannbaren String mit einem anklickbaren Objekt loswerden?
Antwort
den Code unten verwenden und
String mystring =" Hello";
SpannableString ss= new SpannableString(mystring);
ss.setSpan(new MyClickableSpan(mystring), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
class MyClickableSpan extends ClickableSpan{// extend ClickableSpan
String clicked;
public MyClickableSpan(String string) {
super();
clicked = string;
}
public void onClick(View tv) {
Toast.makeText(MainActivity.this,clicked , Toast.LENGTH_SHORT).show();
}
public void updateDrawState(TextPaint ds) {// override updateDrawState
ds.setUnderlineText(false); // set to false to remove underline
}
}
spannableStringObject.toString();
bearbeiten
SpannableString ss = getYourSpannableString();
UnderlineSpan[] uspans = ss.getSpans(0, ss.length(), UnderlineSpan.class);
for (UnderlineSpan us : uspans) {
ss.removeSpan(us);
}
Werden alle UnderlineSpans vom Spannable entfernen.
einfach die oben genannte Antwort versucht, es funktioniert, aber mein klickbare Objekt jetzt nicht arbeiten? – Ash
@Ash Ich habe keine Ahnung, was das bedeutet .. warum gibst du nicht ein wenig mehr Hintergrund und Kontext in deiner Frage. – dcow
toString gibt die Zeichen zurück, die vom SpannableString dargestellt werden, da SpannableString CharacterSequence implementiert. Was ich oben gezeigt habe, wird alle Formatierungen aus dem SpannableString entfernen. – dcow
Aufschalten updateDrawState Methode der ClickableSpan Klasse versuchen
String mystring =" Hello";
SpannableString ss= new SpannableString(mystring);
ss.setSpan(new MyClickableSpan(mystring), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
class MyClickableSpan extends ClickableSpan{// extend ClickableSpan
String clicked;
public MyClickableSpan(String string) {
// TODO Auto-generated constructor stub
super();
clicked =string;
}
public void onClick(View tv) {
Toast.makeText(MainActivity.this,clicked ,
Toast.LENGTH_SHORT).show();
}
public void updateDrawState(TextPaint ds) {// override updateDrawState
ds.setUnderlineText(false); // set to false to remove underline
}
Für Farbe spannable String
SpannableString ss = new SpannableString("android Stack Overflow");
ForegroundColorSpan fcs=newForegroundColorSpan(Color.parseColor("#01579B"));
ss.setSpan(fcs, 8,13, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
Raghunandan Antwort funktioniert perfekt für mich zu ändern. Hier ist eine abgespeckte Version davon:
public abstract class NoUnderlineClickableSpan extends ClickableSpan {
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);
}
}
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
}
}
Dies funktioniert für mich. Keine Notwendigkeit, benutzerdefinierte ClickableSpan
Klasse zu erstellen. Überschreiben Sie einfach updateDrawState(TextPaint ds)
.
SpannableString span = new SpannableString("Some text");
ClickableSpan clickSpan = new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor); // you can use custom color
ds.setUnderlineText(false); // this remove the underline
}
@Override
public void onClick(View textView) {
// handle click event
}
};
span.setSpan(clickSpan, 5, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
yourTextView.setText(span);
Die smootest Lösung – ulusoyca
einfachste Weg ist
string1 = new SpannableString("By Tapping Register You Agree To The \nTerms And Conditions");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getApplicationContext(),"clicked",Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false); // this line removes underline
}
};
text_terms.setMovementMethod(LinkMovementMethod.getInstance());
string1.setSpan(clickableSpan,37,string1.length(),0);
text_terms.setText(string1);
Was ist TextPaint? – Booger
'ds.setColor (Color.rgb (0, 0, 255)), um eine blaue Farbe auf der spannbaren Zeichenfolge zu halten (oder ändern Sie sie in eine beliebige Farbe) –