13
在TextView中,我希望在單擊超鏈接時彈出一個Toast,而不是在瀏覽器中打開相應的URL。我使用下面的代碼,但這裏的問題是的onClick()方法似乎從來沒有被稱爲!!:ClickableSpan的onClick()不適用於URLSpan?
String source = "<a href=\"http://www.google.com\">link</a> ";
// Get SpannableStringBuilder object from HTML code
CharSequence sequence = Html.fromHtml(source, imgGetter, null);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
// Get an array of URLSpan from SpannableStringBuilder object
URLSpan[] urlSpans = strBuilder.getSpans(0, strBuilder.length(), URLSpan.class);
// Add onClick listener for each of URLSpan object
for (final URLSpan span : urlSpans) {
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
strBuilder.setSpan(new ClickableSpan()
{
@Override
public void onClick(View widget) {
Toast toast = Toast.makeText(context, "well done! you click " + span.getURL(), Toast.LENGTH_SHORT);
toast.show();
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
TextView t4 = (TextView) findViewById(R.id.text4);
t4.setText(strBuilder);
// No action if this is not set
t4.setMovementMethod(LinkMovementMethod.getInstance());
誰能告訴我什麼是錯我的代碼,以及如何解決它?謝謝。
我一直在寫解決方案,直到我看到您的回覆。我昨天開始與這個問題作鬥爭。你的代碼給出了我的問題的最後線索。 – raultm 2012-04-17 11:00:46
不錯。它適用於removeSpan。這個解決方案就是我一直在尋找的。謝謝 – 2016-01-28 17:26:07