MultiAutoCompleteTextView
Google+ uygulamasında nasıl uygulandığına benzer şekilde kişi balonları oluşturmaya çalışıyorum . Aşağıda bir ekran görüntüsü verilmiştir:
.
DynamicDrawableSpan
Bir dizi metnin arka planında yayılabilir bir çekilebilirlik elde etmek için sınıfı genişletmeye çalıştım
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;
}
}
Oval.xml çekilebilir dosyam şu şekilde tanımlanır:
<?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>
Şu özelliklere sahip Etkinlik sınıfımda MulitAutoCompleteTextView
, kabarcık yayılımını şu şekilde ayarladım:
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);
Ancak dizede ilk 6 karakterin arkasında görüntülenen oval şekil yerine karakterler görünmez ve arka planda oval bir çizilebilirlik yoktur.
BubbleSpan'ın getDrawable () yöntemini şekil çizilebilir bir şekil yerine .png kullanacak şekilde değiştirirsem:
public Drawable getDrawable() {
Resources res = c.getResources();
Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
d.setBounds(0, 0, 100, 20);
return d;
}
Daha sonra .png görünecek, ancak dizedeki açıklığın bir parçası olan karakterler görünmeyecektir. Yayılma alanındaki karakterlerin ön planda görüntülenmesini, bu arada özel bir şekil çizilebilirinin arka planda görüntülenmesini nasıl sağlayabilirim?
ImageSpan
Alt sınıflandırma yerine bir de kullanmayı denedim DynamicDrawableSpan
ama başarısız oldu.