J'essaie de créer des bulles de contact dans l'application MultiAutoCompleteTextView
similaire à celle de l'application Google+. Vous trouverez ci-dessous une capture d'écran :
.
J'ai essayé d'étendre le DynamicDrawableSpan
afin d'obtenir un dessinable en arrière-plan d'un espace 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 drawable 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 Activity qui a le MulitAutoCompleteTextView
j'ai réglé la portée de la bulle comme suit :
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 que la forme ovale 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 modifie la méthode getDrawable() de BubbleSpan pour utiliser un fichier .png au lieu d'un fichier de forme :
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Le fichier .png s'affiche alors, mais les caractères de la chaîne qui font partie de l'intervalle n'apparaissent pas. Comment puis-je faire en sorte que les caractères de la chaîne s'affichent au premier plan, tandis qu'une forme personnalisée s'affiche à l'arrière-plan ?
J'ai essayé d'utiliser également un ImageSpan
au lieu de sous-classer DynamicDrawableSpan
mais n'a pas réussi.