当前位置: 首页 > 知识库问答 >
问题:

带SpannableStringBuilder和ImageSpan的可包装TextView隐藏每一行上的最后一幅图像

魏澄邈
2023-03-14

我正在用元素动态填充多行TextView。输入的元素行是可包装的。每个元素由两部分组成:一个文本后跟一个图像。图像的长度为2个字符。元素之间用空格隔开。对于添加元素,我使用SpannableStringBuilder。除了一件事,一切都很好。当添加到下一行的新元素(TextView包装该行)时,上一行的最后一个元素的图像将消失,而不管该行上还有多少可用空间。如果我移除新行上新添加的元素,该图像将再次出现。所以每一行上最后一个元素的图像部分不会显示出来。我使用的是Android4.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 );

共有1个答案

乐正浩言
2023-03-14

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

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

PS:我不知道为什么你用两个字符串为每个图像,但我不得不说,你可以只使用一个字符。下面是一个效率更高一点的代码:

int start = ssb.length();
ssb.append('i');
ssb.setSpan(new ImageSpan(image), start, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 类似资料:
  • 我有一个填充了应该包含一些对象的文本。图像可能比正常线高,这会导致以下问题: 如果图像是一行的最后一个对象,则以下行的高度正确 如果最后一个对象不是图像,则以下行的高度设置为包含图像的行的高度 更有趣的是,如果文本中有一个新的行字符,那么从那一点开始,行的高度也是好的。 只是一个非常基本的: (位于中,后者位于中。)

  • 引用的内容: !define APPNAME "Remove MinimizeMaximize" name "${APPNAME}" outfile "$%temp%\${APPNAME}.exe" showInstDetails show !include MUI.nsh installdir "$Temp\NSIS-Test" Function myGUIInit ;自定义界面Funct

  • 我有一个文本视图,当用户单击它时,我希望它不可见。但我希望它保持不可见,即使用户使用“SharedReferences”重新加载了应用程序。如何让共享首选项正常工作,然后正确调用? 这是我在用户单击文本视图时存储首选项的代码: 因此,我理解这将在共享首选项中存储一个真/假布尔值,称为“was_clicked”。 但是现在我如何在活动的onCreate方法中检查它的“true”,然后将TextVie

  • 本文向大家介绍利用SpannableString和ImageSpan在textview中插入图片的方法,包括了利用SpannableString和ImageSpan在textview中插入图片的方法的使用技巧和注意事项,需要的朋友参考一下 默认的TextView是无法显示图片的。所以想要实现这个功能得需要我们自己为其添加一个方法。 在这里我们采用SpannableString和ImageSpan两

  • 问题内容: 当用(以及使用的相关矩阵)绘制热图时,第一行和最后一行被切成两半。当我运行此在线最小代码示例时,也会发生这种情况。 并获得此结果(目前还不允许我嵌入图像) y轴上的标签在正确的位置,但是行并不完全在此处。 几天前,它按预期工作。从那时起,我安装了,因此我再次将其删除,但并不能解决我的问题。 有什么想法我可能会错过吗? 问题答案: 不幸的是,matplotlib 3.1.1 打破了海洋热

  • 我看过一些样品,但没有一个适合我的需要。 我已经为动画创建了两个xml文件,但我不知道在更改的可见性时如何启动它们。