Estou tentando criar bolhas de contato no MultiAutoCompleteTextView
similar a como ele é implementado no aplicativo Google+. Abaixo está uma captura de tela:
.
Tentei estender a DynamicDrawableSpan
classe para obter um drawable spannable no fundo de uma extensão 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;
}
}
Onde meu drawable oval.xml é definido assim:
<?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>
Na minha classe de atividade que tem o MulitAutoCompleteTextView
, eu defino a amplitude da bolha assim:
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);
No entanto, em vez da forma oval exibida atrás dos primeiros 6 caracteres na string, os caracteres não são visíveis e não há drawable oval no fundo.
Se eu alterar o método getDrawable () do BubbleSpan para usar um .png em vez de um drawable de forma:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Em seguida, o .png aparecerá, mas os caracteres na string que fazem parte do período não serão exibidos. Como posso fazer com que os caracteres no intervalo sejam exibidos em primeiro plano, enquanto um drawable de forma personalizada é exibido em segundo plano?
Também tentei usar um em ImageSpan
vez de uma subclasse, DynamicDrawableSpan
mas não tive êxito.
fonte
Respostas:
Obrigado @chrish por toda a ajuda. Então, aqui está como eu fiz:
fonte
BitmapDrawable bd = new BitmapDrawable(bitmap); bd.setBounds(0,0,bitmap.getWidth(), bitmap.getHeight());
isso funciona em todos os dispositivos.Aqui está uma solução completa para você
Aqui está o arquivo do projeto completo, se algum de vocês quiser usar o Spannble
fonte
Eu tenho uma biblioteca que faz o que você procura:
Dê uma olhada aqui
Aqui está um início rápido:
Adicione ChipView ao seu layout ou crie-o programaticamente:
Inicie com uma lista de dados que se estendem ao Chip abstrato e um ouvinte de clique (se desejar):
ChipView padrão é renderizado assim:
Mas você pode personalizar como quiser do nível geral para o nível de Chip:
Este não é um MultiAutocomplete, mas você pode conseguir imitá-lo (na verdade, estou usando-o assim)
fonte