Mam Spannable Object
z zestawem Clickable Object
. Gdy Spannable String
jest wyświetlany w TextView
, ma niebieski tekst i niebieskie podkreślenie (wskazując użytkownikowi, że ten tekst jest klikalny). Mój problem polega na tym, jak mogę zapobiec wyświetlaniu niebieskiego podkreślenia w TextView
?Jak pozbyć się podkreślenia w ciągu spannable za pomocą obiektu klikalnego?
Odpowiedz
Użyj poniższego kodu i spróbuj
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();
Edit
SpannableString ss = getYourSpannableString();
UnderlineSpan[] uspans = ss.getSpans(0, ss.length(), UnderlineSpan.class);
for (UnderlineSpan us : uspans) {
ss.removeSpan(us);
}
usunie wszystkie UnderlineSpans z Spannable.
prostu starał powyższą odpowiedź, to działa, ale moja Clickable Object teraz nie działa? – Ash
@Ash Nie mam pojęcia, co to oznacza .. dlaczego nie podasz więcej tła i kontekstu w swoim pytaniu. – dcow
toString zwraca znaki reprezentowane przez SpannableString, ponieważ SpannableString implementuje CharacterSequence. To, co mam powyżej, usunie całe formatowanie ze SpannableString. – dcow
Zastąp metodę updateDrawState z ClickableSpan klasy
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
}
Aby zmienić kolor z spannable String
SpannableString ss = new SpannableString("android Stack Overflow");
ForegroundColorSpan fcs=newForegroundColorSpan(Color.parseColor("#01579B"));
ss.setSpan(fcs, 8,13, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
odpowiedź Raghunandan za działa idealnie dla mnie. Oto oszczędna wersja to:
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
}
}
Działa to dla mnie. Nie ma potrzeby tworzenia niestandardowej klasy ClickableSpan
. Wystarczy zastąpić 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);
Najbardziej płynne rozwiązanie – ulusoyca
Najprostszym sposobem jest
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);
- 1. Jak pozbyć się obiektu MemoryStream
- 2. Jedność, aby pozbyć się obiektu
- 3. Jak pozbyć się granicy za pomocą JTable/JScrollPane
- 4. Jak pozbyć się interpunkcji za pomocą tokenizera NLTK?
- 5. Jak pozbyć się InvalidClassException SerialVersionUID?
- 6. Jak pozbyć się "$ (ReplacableToken ...)" w web.config całkowicie
- 7. extend() za pomocą znaku podkreślenia kontra szkieletu
- 8. Ruby: Pobierz/ustaw właściwość obiektu za pomocą ciągu/symbolu
- 9. Android Spannable Linia Wysokość
- 10. Właściwość odnośnika na wykresie obiektu za pomocą ciągu znaków
- 11. Jak prawidłowo pozbyć się waithandle
- 12. Jak odwołać się do obiektu odpowiedzi za pomocą polecenia przekreślenia?
- 13. Jak pozbyć się wyróżnienia wyszukiwania w Vim
- 14. Jak pozbyć się LD_LIBRARY_PATH w czasie wykonywania?
- 15. Jak pozbyć się duplikatów w regex
- 16. Jak pozbyć się zestawu zmian w Hg?
- 17. Jak pozbyć się dodatkowych odstępów w LinearLayout?
- 18. Jak pozbyć się ikon w drzewie extjs
- 19. SQL71501 - Jak pozbyć się tego błędu?
- 20. Pozbyć się proxy w symulatorze ios
- 21. Matplotlib pozbyć się wyjścia max_open_warning
- 22. Jak wyświetlić część ciągu za pomocą css
- 23. Jak przekonwertować SpannedString do Spannable
- 24. Jak mogę pozbyć się słowa kluczowego `this` w lokalnych funkcjach?
- 25. Spannable na Androidzie dla textView
- 26. Jak pozbyć się wielu kolumn w bazie danych?
- 27. Jak utworzyć gradient obiektu za pomocą Raphaela
- 28. Usuń wzór z ciągu znaków za pomocą gsub
- 29. iconv podaje "Nielegalny charakter" za pomocą inteligentnych cytatów - jak się ich pozbyć?
- 30. Wywołanie funkcji wewnątrz szablonu podkreślenia za pomocą szkieletu
Co to jest TextPaint? – Booger
'ds.setColor (Color.rgb (0, 0, 255)); 'aby zachować niebieski kolor na łańcuchu spannable (lub zmienić go na dowolny kolor) –