Android,在textview中添加不同数量的可点击跨度

时间:2015-10-19 22:26:00

标签: android html string android-intent click

所以我一直致力于一个项目来添加在iOS上找到的功能,其中我可以分析某些关键字类型的文本字段,在这种情况下是对日期的引用,并突出显示它们以便它们可以点击并启动有意图的新活动,在这种情况下,将日历启动到上述日期。我已经完成了一个程序,它可以提取所需的单词组,并在原始字符串中提供它们的索引值,以及用于意图的相关日期的长度(以毫秒为单位)。

我遇到的问题是弄清楚如何动态地将正确的spannable字符串添加到文本字段中,这样我就可以存储与程序中每个对象关联的onClick操作。如果有一些静态数量的突出显示的对象,我可以编写有限数量的可跨越字符串来创建,但在这种情况下,程序可能会找到一个相关的日期关键字,或者它可能找到50.我不知道如何创建一个我的程序结果是每个索引范围的spannable字符串,并将点击操作与每个索引相关联。

示例:

原始字符串:"您想在下周二吃晚餐吗?"

节目发现:"下周二"开始:30结束:43时间:1445947214457

渴望重新格式化:"您想在下周二晚餐吗?" //可点击

1 个答案:

答案 0 :(得分:1)

你只有一个SpannableString。你会在SpannableString中有很多跨度。

例如,以下方法来自this sample project

  private void searchFor(String text) {
    TextView prose=(TextView)findViewById(R.id.prose);
    Spannable raw=new SpannableString(prose.getText());
    BackgroundColorSpan[] spans=raw.getSpans(0,
                                             raw.length(),
                                             BackgroundColorSpan.class);

    for (BackgroundColorSpan span : spans) {
      raw.removeSpan(span);
    }

    int index=TextUtils.indexOf(raw, text);

    while (index >= 0) {
      raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
          + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      index=TextUtils.indexOf(raw, text, index + text.length());
    }

    prose.setText(raw);
  }

在这里,我发现给定搜索字符串的子字符串匹配,并用BackgroundColorSpan突出显示它们。我不知道会有多少这样的比赛。我为每个人创建一个BackgroundColorSpan。在您的情况下,您的搜索"标准将是不同的,跨度也是如此,但基本方法应该是相同的。