J'essaie de créer des bulles de contact de la même MultiAutoCompleteTextViewmanière que dans l'application Google+. Voici une capture d'écran:
 .
J'ai essayé d'étendre la DynamicDrawableSpanclasse afin d'obtenir un dessin spannable en arrière-plan d'une étendue de texte
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;
  }
}
Où mon dessinable oval.xml est défini comme suit:
<?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>
Dans ma classe d'activité qui a le MulitAutoCompleteTextView, j'ai défini la durée de la bulle comme ceci:
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); 
Cependant, au lieu de la forme ovale qui s'affiche derrière les 6 premiers caractères de la chaîne, les caractères ne sont pas visibles et il n'y a pas d'ovale dessinable en arrière-plan.
Si je change la méthode getDrawable () de BubbleSpan pour utiliser un .png au lieu d'une forme dessinable:
public Drawable getDrawable() {
  Resources res = c.getResources();
  Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
  d.setBounds(0, 0, 100, 20);
  return d;
}
Ensuite, le .png apparaîtra mais les caractères de la chaîne qui font partie de la plage n'apparaîtront pas. Comment puis-je faire en sorte que les caractères de la plage soient affichés au premier plan, tandis qu'une forme personnalisée pouvant être dessinée s'affiche en arrière-plan?
J'ai essayé d'utiliser également un ImageSpanau lieu de sous-classer, DynamicDrawableSpanmais sans succès.


