有没有办法从字符串的一部分启动一个Activity。
例如,在我的strings.xml文件中,我有这个:
<string name="clickable_string">This is a <u>clickable string</u></string>
我想让插入在TextView
中的u
标签内的文本带有下划线,并且在被点击时启动一个活动。
尝试这样做,
final Context context = ... // whereever your context is
CharSequence sequence = Html.fromSource(context.getString(R.string.clickable_string));
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
UnderlineSpan[] underlines = strBuilder.getSpans(UnderlineSpan.class);
for(UnderlineSpan span : underlines) {
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan myActivityLauncher = new ClickableSpan() {
public void onClick(View view) {
context.startActivity(getIntentForActivityToStart());
}
};
strBuilder.setSpan(myActivityLauncher, start, end, flags);
}
TextView textView = ...
textView.setText(strBuilder);
textView.setMovementMethod(LinkMovementMethod.getInstance());
基本上,您需要将一个Span对象附加到要单击的字符范围上。由于您已经在使用HTML,因此可以使用Html.fromSource()放置的下划线span作为自己的标记。
或者,您还可以在字符串中定义一个只有您知道的标记。
例如:<activity>
并提供自己的标签处理程序给Html.fromSource()方法。这种方法可以让您的TagHandler实例将标记文本用特定的颜色、下划线、加粗和可单击的方式包围起来。但是,如果您发现自己经常编写此类代码,则建议使用TagHandler方法。
在这里回答:使TextView的部分文本可点击(非URL) 如果您想要将其用于HTML消息,则可以进行以下修改: 在您的Display函数中
public void displayText(String message) {
chapterTextView.setText(Html.fromHtml(message),TextView.BufferType.SPANNABLE);
chapterTextView.setMovementMethod(LinkMovementMethod.getInstance());
Spannable clickableMessage = (Spannable) chapterTextView.getText();
chapterTextView.setText(addClickablePart(clickableMessage), BufferType.SPANNABLE);
}
private SpannableStringBuilder addClickablePart(Spannable charSequence) {
SpannableStringBuilder ssb = new SpannableStringBuilder(charSequence);
int idx1 = charSequence.toString().indexOf("(");
int idx2 = 0;
while (idx1 != -1) {
idx2 = charSequence.toString().indexOf(")", idx1) + 1;
final String clickString = charSequence.toString().substring(idx1, idx2);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getActivity(), clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
idx1 = charSequence.toString().indexOf("(", idx2);
}
return ssb;
}
将此字符串分配给您的XML布局之一,然后在代码中获取TextView的ID,然后为此TextView实现OnClickListener,在其中可以启动您想要的新活动。