Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有没有办法在文本视图中插入ImageSpan而不中断文本?_Android_Spannablestring_Imagespan - Fatal编程技术网

Android 有没有办法在文本视图中插入ImageSpan而不中断文本?

Android 有没有办法在文本视图中插入ImageSpan而不中断文本?,android,spannablestring,imagespan,Android,Spannablestring,Imagespan,似乎为了在Android中将ImageSpan添加到Spanable中,我必须用图像替换一些文本。例如: Spannable span = new SpannableString("Foo imageplace Bar!"); Drawable android = context.getResources().getDrawable(R.drawable.android); android.setBounds(0, 0, 32,32); ImageSpan image = new ImageSp

似乎为了在Android中将ImageSpan添加到Spanable中,我必须用图像替换一些文本。例如:

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图标的每个地方插入无意义的文本有点头疼。但看起来,如果跨度的开始和结束相同,则不会包括该图像。有什么办法可以解决这个问题吗?

也许您可以添加一个额外的空间,用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);

您会发现图像会在不中断文本的情况下替换额外的空间。

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

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);

如果要在文本末尾插入可绘制内容,可绘制内容将隐藏文本的最后一个字符,以避免在文本末尾添加另一个字符并在该字符处启动可绘制内容

val myText = "Your text"    

val span: Spannable = SpannableString(myText+"-")
val android: Drawable = ContextCompat.getDrawable(this, R.drawable.yourDrawable)!!
android.setBounds(0, 0, 30, 30)
val image = ImageSpan(android, ImageSpan.ALIGN_BOTTOM)
span.setSpan(image, span.indexOf("-"), span.indexOf("-")+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)