我正在尝试创建与在MultiAutoCompleteTextView
Google+ 应用程序中实现方式类似的联系人气泡。下面是一个屏幕截图:
.
我试图扩展DynamicDrawableSpan
类,以便在一段文本的背景中获得一个可绘制的可绘制对象
public class BubbleSpan extends DynamicDrawableSpan {
private Context c;
public BubbleSpan(Context context) {
super();
c = context;
}
@Override
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(R.drawable.oval);
d.setBounds(0, 0, 100, 20);
return d;
}
}
我的椭圆形.xml 可绘制对象定义如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#352765"/>
<padding android:left="7dp" android:top="7dp"
android:right="7dp" android:bottom="7dp" />
<corners android:radius="6dp" />
</shape>
在我的 Activity 类中MulitAutoCompleteTextView
,我像这样设置气泡跨度:
final Editable e = tv.getEditableText();
final SpannableStringBuilder sb = new SpannableStringBuilder();
sb.append("some sample text");
sb.setSpan(new BubbleSpan(getApplicationContext()), 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
e.append(sb);
但是,字符串中的前 6 个字符后面不是显示椭圆形,而是字符不可见,并且背景中没有可绘制的椭圆形。
如果我将 BubbleSpan 的 getDrawable() 方法更改为使用 .png 而不是可绘制的形状:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
然后 .png 将显示,但作为跨度一部分的字符串中的字符将不会显示。如何使跨度中的字符显示在前景中,同时自定义形状可绘制对象显示在背景中?
我也尝试使用 anImageSpan
而不是子类化DynamicDrawableSpan
,但没有成功。