Estoy intentando crear burbujas de contacto de forma MultiAutoCompleteTextView
similar a como se implementa en la aplicación Google+. A continuación se muestra una captura de pantalla:
.
He intentado extender la DynamicDrawableSpan
clase para obtener un dibujable extensible en el fondo de un lapso de texto
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;
}
}
Donde mi dibujable oval.xml se define así:
<?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>
En mi clase de actividad que tiene MulitAutoCompleteTextView
, configuro el intervalo de burbujas así:
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);
Sin embargo, en lugar de que la forma ovalada se muestre detrás de los primeros 6 caracteres de la cadena, los caracteres no son visibles y no hay un dibujo ovalado en el fondo.
Si cambio el método getDrawable () de BubbleSpan para usar un .png en lugar de una forma dibujable:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Luego, aparecerá el .png, pero los caracteres de la cadena que son parte del intervalo no aparecerán. ¿Cómo puedo hacer que los caracteres en el intervalo se muestren en primer plano, mientras que un dibujable de forma personalizada se muestra en el fondo?
Intenté usar también un en ImageSpan
lugar de subclases DynamicDrawableSpan
pero no tuve éxito.
fuente
Respuestas:
Gracias @chrish por toda la ayuda. Así que así es como lo hice:
fuente
BitmapDrawable bd = new BitmapDrawable(bitmap); bd.setBounds(0,0,bitmap.getWidth(), bitmap.getHeight());
eso funciona en todos los dispositivos.Aquí hay una solución completa para ti
Aquí está el archivo del proyecto completo, si alguno de ustedes quiere usar Spannble
fuente
Tengo una biblioteca que hace lo que estás buscando con:
Echa un vistazo aquí
Aquí un inicio rápido:
Agregue ChipView a su diseño o créelo mediante programación:
Inícielo con una lista de datos que amplían el Chip abstracto y un oyente de clics (si lo desea):
ChipView predeterminado se representa así:
Pero puede personalizarlo a su gusto desde el nivel general hasta el nivel de Chip:
Este no es un MultiAutocomplete, pero puedes imitarlo (en realidad lo estoy usando así)
fuente