首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:从可点击的文本启动活动

Android:从可点击的文本启动活动
EN

Stack Overflow用户
提问于 2010-10-27 00:32:02
回答 3查看 16.5K关注 0票数 23

有没有什么方法可以从字符串的一部分启动活动。

例如,我的strings.xml文件中包含以下内容:

代码语言:javascript
复制
<string name="clickable_string">This is a <u>clickable string</u></string>

我希望在插入到TextView中时单击u标记之间的文本以加下划线并启动活动

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-27 01:37:08

尝尝这个,

代码语言:javascript
复制
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方法。

票数 43
EN

Stack Overflow用户

发布于 2010-10-27 00:58:19

将这个字符串分配给您的xml布局之一,然后在代码中获取Textview的id,然后为这个文本视图实现OnClickListener,在其中您可以启动您想要的新活动。

票数 2
EN

Stack Overflow用户

发布于 2014-08-05 07:21:28

我只是做了一个修改,如果你想在Make parts of textview clickable (not url)消息中使用它,请在你的显示函数中执行以下操作

代码语言:javascript
复制
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函数

代码语言:javascript
复制
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;
    }

希望这对某些人有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4025770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档