问题 有没有办法在不中断文本的情况下在TextView中插入ImageSpan?


似乎为了在Android中将SpanSpan添加到Spannable,我必须用Image替换一些文本。例如:

Spannable span = new SpannableString("Foo imageplace Bar!");
Drawable android = context.getResources().getDrawable(R.drawable.android);
android.setBounds(0, 0, 32,32);
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE);
span.setSpan(image, 4, 14, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

这将用图像替换“imageplace”。因为我正在处理复杂的多跨文本和重复,所以在我想要android图标的每个地方插入无意义的文本有点令人头疼。但看起来如果跨度的开始和结束相同,则不会包含图像。有没有办法解决?


8415
2017-11-11 07:34


起源



答案:


也许你可以添加一个额外的空间来替换ImageSpan。例如,

Spannable span = new SpannableString("Foo  imageplace Bar!");
Drawable android = context.getResources().getDrawable(R.drawable.android);
android.setBounds(0, 0, 32,32);
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE);
span.setSpan(image, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

并且您会发现图像替换了额外的空间而不会破坏文本。


7
2018-04-20 04:21





您必须知道文本的长度,即要添加图像后的文本长度。例如..

Drawable image = ContextCompat.getDrawable(mContext, android.R.drawable.presence_offline);
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
// Replace blank spaces with image icon
String myText = "myText";
int textLength = myText.length();
SpannableString sb = new SpannableString(myText + "   " + "This is another text");
ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
sb.setSpan(imageSpan, textLength, textLength + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

4
2018-03-31 17:14