2014-11-11 1 views
8

Кажется, что для добавления ImageSpan в Spannable в Android, я должен фактически заменить некоторый текст на изображение. Например:Есть ли способ вставить ImageSpan в TextView, не нарушая текст?

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

Это заменит образ изображения на изображение. Поскольку я имею дело со сложным многопролетным текстом и повторением, это немного головная боль, чтобы вставлять бессмысленный текст в каждое место, где я хочу значок Android. Но похоже, что если начало и конец диапазона одинаковы, изображение не будет включено. Есть ли способ обойти это?

ответ

6

Возможно, вы можете добавить дополнительное пространство для замены 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); 

И вы найдете, что изображение заменит дополнительное пространство, не нарушая текст.

2

Вы должны знать длину текста, после того как вы захотите добавить изображение. Например ..

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