我想在给定字符串中点击一些单词,例如“我必须遇见@vikash和@walker以及@jay。”onClick我将打开一个拨号窗口。) 在这里我想让所有单词在开始时都有“@”。 使用它只有一个单词是可点击的。
private SpannableStringBuilder addClickablePart(String str) {
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
int idx1 = desc.indexOf("@");
int idx2 = 0;
while (idx1 != -1) {
idx2 = str.indexOf(" ", idx1) + 1;
final String clickString = str.substring(idx1, idx2);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ViewNote.this, clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, 0);
idx1 = str.indexOf("[", idx2);
}
return ssb;
}
答案 0 :(得分:0)
答案 1 :(得分:0)
正如@Veaceslav Gaidarji所说,@ words尝试使用regex。
试试这段代码:
private SpannableString addClickablePart(String str) {
SpannableString ss = new SpannableString(str);
Pattern pattern = Pattern.compile("[@]\\w*");
Pattern matcher = pattern.matcher(str);
while (matcher.find()) {
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
// do toasting
}
};
ss.setSpan(clickableSpan, matcher.start, matcher.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}
---编辑---
此代码将使用正则表达式模式([@] \ w *)搜索所有@character,然后为它们添加可点击范围。 我们使用SpannableString而不是SpannableStringBuilder,因为我们不需要在这里构建spannableString。