gpt4 book ai didi

android - 为什么不能使用同一个 Span 对象对上面的 setSpan 进行两次设置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:41 24 4
gpt4 key购买 nike

为什么不能使用同一个 Span 对象对上面的 setSpan 进行两次设置?

SpannableString ss = new SpannableString("aaaaa[1]bbbb[1]cccc[1]");

我需要用图像替换所有 [1]。如果我使用下面的代码,只有最后一个被图像替换:

etShow = (EditText) findViewById(R.id.show);
SpannableString ss = new SpannableString("aaaaa[1]bbbb[1]cccc[1]");
int[] starts = new int[3];
int[] ends = new int[3];
int h = 0;
int k = 0;
for (int i = 0; i < ss.length(); i++) {
if (ss.charAt(i) == '[') {
starts[h] = i;
h++;
} else if (ss.charAt(i) == ']') {
ends[k] = i;
k++;
}
}

Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
ImageSpan im = new ImageSpan(d);

for(int i=0;i<3;i++){
ss.setSpan(im, starts[i], ends[i]+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
etShow.getText().insert(0, ss);

如果改成下面的代码,所有的[1]都被替换成图片。

Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
ImageSpan im = new ImageSpan(d);
ImageSpan im1 = new ImageSpan(d);
ImageSpan im2 = new ImageSpan(d);
//for(int i=0;i<3;i++){
// ss.setSpan(im, starts[i], ends[i]+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(im, starts[0], ends[0]+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(im1, starts[1], ends[1]+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(im2, starts[2], ends[2]+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
// }

这怎么解释?

最佳答案

我怀疑 span 对象最终成为 HashMap 的键,在 Spanned 表示中。因此,重复使用相同的 span 对象具有用新用途替换其先前用途的效果。

关于android - 为什么不能使用同一个 Span 对象对上面的 setSpan 进行两次设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13118278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com