Есть ли способ вставить ImageSpan в TextView, не нарушая текст?
Кажется, что для добавления ImageSpan в Spannable в Android, мне нужно заменить текст на изображение. Например:
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, является головной болью. Но похоже, что если начало и конец промежутка совпадают, изображение не будет включено. Есть ли способ обойти это?
3 ответа
Может быть, вы можете добавить дополнительное пространство для замены на 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);
Если вы хотите вставить Drawable в конец текста, Drawable скрывает последний символ текста, чтобы избежать добавления еще одного символа в конец текста и начала рисования с этого символа.
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)