我有一个像这样的textView:
<TextView
android:id="@+id/note_viewer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:autoLink="email|web|phone"
android:textSize="15sp" />
这样的Spannable字符串:
String input = note.getText();
SpannableStringBuilder builder = new SpannableStringBuilder(input);
Pattern pattern = Pattern.compile(XTAG_PATTERN);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String text = input.subSequence(start, end).toString();
ClickableURLSpan url = new ClickableURLSpan(text, getActivity()
.getApplicationContext(), this);
builder.setSpan(url, start, end, 0);
}
noteView.setText(builder);
noteView.setMovementMethod(LinkMovementMethod.getInstance());
这样的自定义`URLSpan类:
public class ClickableURLSpan extends URLSpan {
Context context;
NoteViewFragment noteViewFragment;
public ClickableURLSpan(String url,Context c, NoteViewFragment noteViewFragment) {
super(url);
context=c;
this.noteViewFragment=noteViewFragment;
}
@Override
public void onClick(View widget) {
String clickedText = getURL();
Intent i=new Intent(context,SearchActivity.class);
i.putExtra("tag", clickedText);
noteViewFragment.startActivity(i);
}}
但是当我使用自动链接时,我的自定义可点击范围不起作用。如何同时使用自动链接和我自己的可点击范围?
答案 0 :(得分:1)
将可传输字符串更改为:
String input = note.getText();
Spannable spannable = new SpannableString(Html.fromHtml(input));
Pattern pattern = Pattern.compile(XTAG_PATTERN);
Linkify.addLinks(spannable, pattern, "");
URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class);
for (URLSpan urlSpan : spans) {
ClickableURLSpan linkSpan = new ClickableURLSpan(text, getActivity().getApplicationContext(), this);
int spanStart = spannable.getSpanStart(urlSpan);
int spanEnd = spannable.getSpanEnd(urlSpan);
spannable.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.removeSpan(urlSpan);
}
textview.setMovementMethod(EnhancedLinkMovementMethod.getInstance());
noteView.setText(spannable, TextView.BufferType.SPANNABLE);