gpt4 book ai didi

java - 带有 SpannableStringBuilder 和 ImageSpan 的可包装 TextView 隐藏每一行的最后一个图像

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:51 25 4
gpt4 key购买 nike

我正在用元素动态填充多行 TextView。输入元素的行是可换行的。每个元素由两部分组成:文本和图像。图片长度为2个字符。元素由空格分隔。为了添加元素,我使用了 SpannableStringBuilder。除了一件事,一切都很好。当添加一个新元素进入下一行(TextView 换行)时,前一个元素的图像(即上一行的最后一个元素)会消失,无论该行上还有多少可用空间。如果我在新行中删除新添加的元素,该图像会再次出现。因此,每行最后一个元素的图像部分不会显示出来。我使用的是 Android 4.0.3。

这是我的代码:

TextView textView = (TextView) findViewById(R.id.textview);
textView.setMovementMethod(new ScrollingMovementMethod());

SpannableStringBuilder ssb = new SpannableStringBuilder();

//then for each new element I do the following
ssb.append(" "); //space separating elements (skip for the first element)
ssb.append("text");
Bitmap image = BitmapFactory.decodeResource( getResources(), imageId );
ssb.append(" "); //prepare 2-character space for the image
ssb.setSpan( new ImageSpan(image), ssb.length() - 2, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); //put the image to the prepared space
textView.setText( ssb, BufferType.SPANNABLE );

我知道 TextWatcher 有一个解决方案。同时,我在代码中看不到任何流程,也不明白为什么每行的最后一张图片都被隐藏了。任何建议将不胜感激。谢谢。

最佳答案

我找到了解决方案。问题在于文本行的计算方式。如果一行以空格字符结尾,则在计算过程中会忽略该空格。因此,您所要做的就是使用任何字母作为图像的占位符。像这样:

ssb.append(" i"); //prepare 2-characters for the image

PS:我不知道你为什么要为每张图片使用 2 个字符的 String,但我不得不说你只能使用一个 Char。这是一个更高效的代码:

int start = ssb.length();
ssb.append('i');
ssb.setSpan(new ImageSpan(image), start, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

关于java - 带有 SpannableStringBuilder 和 ImageSpan 的可包装 TextView 隐藏每一行的最后一个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21918402/

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