我试图在 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;
}
}
在这里,我的 oval.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>
在具有 MulitAutoCompleteTextView
的 Activity 类中,我如下设置了泡沫跨度:
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 将显示,但字符串中属于 span 的字符将不会显示。如何使跨度中的字符显示在前景中,同时自定义形状绘制显示在背景中?
我也尝试使用 ImageSpan
代替子类化 DynamicDrawableSpan
,但是没有成功。