Sto cercando di creare bolle di contatto in modo MultiAutoCompleteTextView
simile a come è implementato nell'app Google+. Di seguito è una schermata:
.
Ho cercato di estendere la DynamicDrawableSpan
classe per ottenere un disegnabile spannabile sullo sfondo di un intervallo di testo
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;
}
}
Dove il mio drawable oval.xml è definito così:
<?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>
Nella mia classe di attività che ha il MulitAutoCompleteTextView
, ho impostato l'intervallo di bolle in questo modo:
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);
Tuttavia, invece della forma ovale visualizzata dietro i primi 6 caratteri nella stringa, i caratteri non sono visibili e non è tracciabile alcun ovale sullo sfondo.
Se cambio il metodo getDrawable () di BubbleSpan per utilizzare un .png invece di una forma disegnabile:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Quindi verrà visualizzato .png ma i caratteri nella stringa che fanno parte dell'intervallo non verranno visualizzati. Come posso fare in modo che i caratteri nell'intervallo siano visualizzati in primo piano, nel frattempo una forma disegnabile personalizzata viene visualizzata sullo sfondo?
Ho tentato di utilizzare anche una ImageSpan
invece di una sottoclasse, DynamicDrawableSpan
ma senza successo.