web-dev-qa-db-ja.com

テキストを中断せずにImageSpanをTextViewに挿入する方法はありますか?

AndroidのSpannableにImageSpanを追加するには、実際に一部のテキストを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アイコンが必要な場所に意味のないテキストを挿入するのは少し頭痛の種です。しかし、開始と終了のように見えますスパンが同じ場合、画像は含まれませんが、これを回避する方法はありますか?

17
yuttadhammo

たぶん、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);

また、テキストを中断することなく、画像が追加のスペースを置き換えることがわかります。

13
lovefish

画像を追加した後のテキストの長さを知っている必要があります。例えば..

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