【发布时间】:2012-06-04 10:53:39
【问题描述】:
我正在尝试在 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>
在具有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 的一部分的字符串中的字符将不会显示。如何使 span 中的字符显示在前台,同时自定义形状 drawable 显示在后台?
我也尝试使用ImageSpan,而不是子类化DynamicDrawableSpan,但没有成功。
【问题讨论】:
-
如何获得选定的联系电话
-
github.com/splitwise/TokenAutoComplete 可能对某些人有帮助
标签: android android-edittext drawable html