如何使spannable多个文本? [英] How to make spannable with multiple text?
本文介绍了如何使spannable多个文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
String sentence="this is @part 1 and #here another and #another one @user #newone @itsme ";
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(addClickablePart(sentence), BufferType.SPANNABLE);
private SpannableStringBuilder addClickablePart(String str) {
SpannableStringBuilder ssb=new SpannableStringBuilder(str);
int idx1=Math.min(str.indexOf("@"),str.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(getApplicationContext(), clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, 0);
idx1=Math.min(str.indexOf("#", idx2),str.indexOf("@", idx2) );
}
return ssb;
}
对于第一五个字却留下最后一个(@itsme)其工作罚款。
它左派只有最后一个(不管什么串的长度)
its working fine for first five words but left last one (@itsme). it lefts only last one (no matter whats the length of string).
推荐答案
把一个条件在while语句检查字符串的大小。
put one condition in while statement for checking string size.
我觉得 IDX2
在最后一个循环是0,因为 str.indexOf()
为-1,那么-1 +1 = 0。
i think idx2
in last loop is 0, because str.indexOf()
is -1 then -1 +1 = 0.
所以你检查,如果 IDX2
0然后进行点击,直到最后的尺寸
so you check that if idx2
is 0 then make clickable until last of size
使用以下code:
while (idx1 != -1) {
idx2 = sentence.indexOf(" ", idx1) + 1;
if(idx2 == 0)
idx2 = sentence.length(); // or str.lenght()-1
idx2 = sentence.indexOf(" ", idx1) + 1;
final String clickString=str.substring(idx1, idx2);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getApplicationContext(), clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, 0);
idx1 = FindMin(idx2+1 , sentence);
}
FindMin是:
FindMin is:
public int FindMin(int i2 , String mystr)
{
int idx1 = mystr.indexOf("@" , i2);
int idx2 = mystr.indexOf("#" , i2);
int minIndex;
if(idx1 >= 0 && idx2 >= 0 )
minIndex = Math.min(mystr.indexOf("@" , i2) ,mystr.indexOf("#" , i2) );
else if (idx1 >= 0)
minIndex = idx1;
else
minIndex = idx2;
return minIndex;
}
这篇关于如何使spannable多个文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文