Ich versuche, Kontaktblasen zu erstellen, MultiAutoCompleteTextView
ähnlich wie sie in der Google+ App implementiert sind. Unten ist ein Screenshot:
.
Ich habe versucht, die DynamicDrawableSpan
Klasse zu erweitern, um eine spannbare Zeichnung im Hintergrund einer Textspanne zu erhalten
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;
}
}
Wo meine oval.xml drawable wie folgt definiert ist:
<?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>
In meiner Aktivitätsklasse mit dem habe MulitAutoCompleteTextView
ich die Blasenspanne wie folgt eingestellt:
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);
Anstelle der ovalen Form, die hinter den ersten 6 Zeichen in der Zeichenfolge angezeigt wird, sind die Zeichen jedoch nicht sichtbar und im Hintergrund kann kein Oval gezeichnet werden.
Wenn ich die getDrawable () -Methode von BubbleSpan so ändere, dass anstelle einer zeichnbaren Form eine PNG-Datei verwendet wird:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Dann wird die PNG-Datei angezeigt, aber die Zeichen in der Zeichenfolge, die Teil der Spanne sind, werden nicht angezeigt. Wie kann ich dafür sorgen, dass die Zeichen in der Spanne im Vordergrund angezeigt werden, während im Hintergrund eine benutzerdefinierte Form gezeichnet wird?
Ich habe versucht, ImageSpan
anstelle von auch eine Unterklasse zu verwenden DynamicDrawableSpan
, war jedoch nicht erfolgreich.