Comment convertir SpannedString en Spannable
Bonjour, j'ai mis un peu de texte dans un textview.
TextView tweet = (TextView) vi.findViewById(R.id.text);
tweet.setText(Html.fromHtml(sb.toString()));
Alors j'ai besoin de convertir le texte de la TextView
en Spannble
. J'ai donc fait cela comme:
Spannable s = (Spannable) tweet.getText();
J'ai besoin de le convertir Spannable
parce que j'ai passé le TextView
dans une fonction:
private void stripUnderlines(TextView textView) {
Spannable s = (Spannable) textView.getText();
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
private class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
Ce montre pas d'erreur/d'avertissement. Mais le fait de lancer une Erreur d'Exécution:
java.lang.ClassCastException: android.text.SpannedString cannot be cast to android.text.Spannable
Comment puis-je convertir des SpannedStringt/texte de la textview dans Spannble? Ou je peux faire la même chose avec les SpannedString l'intérieur de la fonction?
source d'informationauteur Kaidul Islam
Vous devez vous connecter pour publier un commentaire.
new SpannableString(textView.getText())
devrait fonctionner.Désolé, mais
removeSpan()
etsetSpan()
sont des méthodes sur leSpannable
interface, etSpannedString
ne pas mettre en œuvreSpannable
.Ce devrait être la bonne. Sa fin tho mais quelqu'un pourrait avoir besoin dans le futur
Malheureusement, aucun de ces fonctionné pour moi, mais après de bidouiller avec l'ensemble de vos solutions, j'ai trouvé quelque chose qui a travaillé.
Il générera une erreur de casting le textView.getText() pour Spannable, sauf si vous spécifiez comme SPANNABLE
Aussi l'Avis de @CommonsWare page:
Notez que vous ne voulez pas appeler setText() sur le TextView, pensant qu'il serait de remplacer le texte avec la version modifiée. Vous êtes en train de modifier le TextView du texte à la place de cette fixTextView() la méthode, et donc setText() n'est pas nécessaire. Pire encore, si vous utilisez android:autoLink, setText() serait la cause de l'Androïde revenir en arrière et ajouter URLSpans de nouveau.
Si vous spécifiez
BufferType.SPANNABLE
lors de la configuration de laTextView
texte, puis lors de l'obtention de texte, vous pouvez le convertir enSpannable