Android:从可点击的文本启动活动
有什么办法可以从一个string的一部分启动一个活动。
例如我在我的strings.xml文件中有这个:
<string name="clickable_string">This is a <u>clickable string</u></string>
我想u
标签之间的文本被加下划线,并插入到TextView
时单击时启动一个活动
尝试这个,
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()放置的下划线作为你自己跨越的标记。
或者,你也可以在只有你知道的string中定义一个标签。 即<activity>
然后将自己的标记处理程序提供给Html.fromSource()方法。 这样你的TagHandler实例可以做类似的事情,用特定的颜色包围标记文本,下划线,粗体和可点击。 但是,如果您发现自己编写这种types的代码,我只会推荐TagHandler方法。
将这个string分配给你的一个xml布局,然后在你的代码中得到TextView的id,然后为这个Textview实现OnClickListener,在里面你可以开始你想要的新活动。
在这里回答让部分textview可点击(不是url)我只是做了一个修改,如果你想使用它与HTML消息做以下在您的显示function
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); }
修改了addClickablePart的function
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; }
希望这可以帮助别人。