Android:从可点击文本启动活动
Posted
技术标签:
【中文标题】Android:从可点击文本启动活动【英文标题】:Android: Launch activity from clickable text 【发布时间】:2011-04-30 20:37:15 【问题描述】:有什么方法可以从字符串的一部分启动活动。
例如 我的 strings.xml 文件中有这个:
<string name="clickable_string">This is a <u>clickable string</u></string>
我希望u
标记之间的文本带有下划线,并在插入TextView
时单击时启动一个活动
【问题讨论】:
【参考方案1】:试试这个,
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() 放置的下划线跨度作为您自己的跨度的标记。
或者,您也可以在字符串中定义一个只有您知道的标签。
即<activity>
并将您自己的标记处理程序提供给 Html.fromSource() 方法。这样,您的 TagHandler 实例可以执行类似的操作,用特定颜色、下划线、粗体围绕标记文本并使其可点击。但是,如果您发现自己经常编写此类代码,我只会推荐 TagHandler 方法。
【讨论】:
这太棒了。不过有一件事,如果我使用 getString 获取字符串它不起作用:(。我现在只是在代码中硬编码字符串.. 是的。另外,如果你想将链接颜色设置为白色:textView.setLinkTextColor(android .R.color.white); 嗨 Kabal,无论使用 getString() 还是 getText(),它都可以正常工作。通过使用 Html.fromSource(String) 它将创建一个跨度,并将 html 标记转换为跨度,供 android 的文本渲染器处理。如果您认为您可能正在处理某个特定问题,请提出后续问题。 你好,太棒了!我怎样才能点击字符串?我有多个 textView 可点击的字符串(下划线)?有什么帮助吗? 您可以创建一个 ClickableSpan 并将其与您希望可点击的字符串中的字符相关联。类似于上面的 UnderlineSpan 解决方案。【参考方案2】:将此字符串分配给您的 xml 布局之一,然后在您的代码中获取 TextView 的 id,然后为此 Textview 实现 OnClickListener,在其中您可以开始您想要的新活动。
【讨论】:
问题是我只希望标签内的文本是可点击的。我已经稍微简化了这个问题,但这是一个要求。基本上我希望它像 HTML 链接标签一样,但它不是网页,而是启动一个活动。【参考方案3】:在这里回答Make parts of textview clickable (not url) 如果您想将它与 HTML 消息一起使用,我刚刚进行了修改,请执行以下操作 在您的显示功能中
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的修改功能
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;
希望这对某人有所帮助。
【讨论】:
以上是关于Android:从可点击文本启动活动的主要内容,如果未能解决你的问题,请参考以下文章