こんにちは私はtextviewにいくつかのテキストを設定しました。
TextView Tweet = (TextView) vi.findViewById(R.id.text);
Tweet.setText(Html.fromHtml(sb.toString()));
次に、TextView
のテキストをSpannble
に変換する必要があります。だから私はこれを次のようにしました:
Spannable s = (Spannable) Tweet.getText();
Spannable
を関数に渡したので、TextView
に変換する必要があります。
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);
}
}
これはエラー/警告を示していません。しかし、ランタイムエラーをスローします:
Java.lang.ClassCastException: Android.text.SpannedString cannot be cast to Android.text.Spannable
テキストビューのSpannedStringt/textをSpannbleに変換するにはどうすればよいですか?または、関数内のSpannedStringで同じタスクを実行できますか?
テキストビューのSpannedStringt/textをSpannbleに変換するにはどうすればよいですか?
new SpannableString(textView.getText())
は機能するはずです。
または、関数内のSpannedStringで同じタスクを実行できますか?
申し訳ありませんが、removeSpan()
とsetSpan()
はSpannable
インターフェースのメソッドであり、SpannedString
はSpannable
を実装していません。
これは正しい回避策であるはずです。その遅いトーですが、誰かが将来それを必要とするかもしれません
private void stripUnderlines(TextView textView) {
SpannableString s = new SpannableString(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);
}
}
残念ながら、これらのどれも私にはうまくいきませんでしたが、あなたのすべての解決策をいじった後、私はうまくいく何かを見つけました。
SPANNABLEとして指定しない限り、textView.getText()をSpannableにキャストするとエラーが発生します
@CommonsWareのページからも注意してください:
テキストを変更されたバージョンに置き換えることを考えて、TextViewでsetText()を呼び出さないことに注意してください。このfixTextView()メソッドでTextViewのテキストを変更しているため、setText()は必要ありません。さらに悪いことに、Android:autoLinkを使用している場合、setText()によってAndroidに戻り、URLSpansを再度追加します。
accountAddressTextView.setText(accountAddress, TextView.BufferType.SPANNABLE);
stripUnderlines(accountAddressTextView);
private void stripUnderlines(TextView textView) {
Spannable entrySpan = (Spannable)textView.getText();
URLSpan[] spans = entrySpan.getSpans(0, entrySpan.length(), URLSpan.class);
for (URLSpan span: spans) {
int start = entrySpan.getSpanStart(span);
int end = entrySpan.getSpanEnd(span);
entrySpan.removeSpan(span);
span = new URLSpanNoUnderline(entrySpan.subSequence(start, end).toString());
entrySpan.setSpan(span, start, end, 0);
}
}