private void fixTextView(TextView tv) {
SpannableString current = (SpannableString) tv.getText();
URLSpan[] spans =
current.getSpans(0, current.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = current.getSpanStart(span);
int end = current.getSpanEnd(span);
current.removeSpan(span);
current.setSpan(new DefensiveURLSpan(span.getURL()), start, end,
0);
}
}
public static class DefensiveURLSpan extends URLSpan {
public final static Parcelable.Creator<DefensiveURLSpan> CREATOR =
new Parcelable.Creator<DefensiveURLSpan>() {
@Override
public DefensiveURLSpan createFromParcel(Parcel source) {
return new DefensiveURLSpan(source.readString());
}
@Override
public DefensiveURLSpan[] newArray(int size) {
return new DefensiveURLSpan[size];
}
};
private String mUrl;
public DefensiveURLSpan(String url) {
super(url);
mUrl = url;
}
@Override
public void onClick(View widget) {
// openInWebView(widget.getContext(), mUrl); // intercept click event and do something.
// super.onClick(widget); // or it will do as it is.
}
}
Sie würden dann Rufen Sieanauf der Ansicht nach der es (über Inflation oder findViewById
) deklariert oder in das Fenster (über addView
)
hinzugefügt wird Dies enthält die fehlende Anforderung, einen ERSTELLER festzulegen, wenn ein Parcelable erweitert wird.
Es wurde als Bearbeitung vorgeschlagen, aber abgelehnt. Leider müssen zukünftige Benutzer erst herausfinden, dass das Original unvollständig ist. Netter, Rezensenten!
Upvote für eine nette Frage.Aber nicht möglich, meiner Meinung nach – Sameer
müssen Sie den Text als verschiedene Textansichten trennen, und separate Hörer einstellen, kann nicht an eine andere Möglichkeit – Mal