SORU
30 Mayıs 2012, ÇARŞAMBA


İletişim Balonu EditText

MultiAutoCompleteTextView kişi bubbles Google app nasıl uygulandığına benzer oluşturmak için çalışıyorum. Aşağıda bir ekran görüntüsü:

Google  Compose Post Screenshot .

Metin alanının arka planda spannable bir drawable almak için DynamicDrawableSpan sınıf genişletmek için çalıştık

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 benim drawable: şeklinde 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>

Benim Etkinlik ** 9, g sınıfı gibi kabarcık span ayarlayın:

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, oval şekli dizesinde ilk 6 karakter arkasında görüntülemek yerine, karakterler görünmez ve arka planda oval drawable yok.

Eğer BubbleSpan. getDrawable değiştirirsem() yöntemini kullanın .şekil drawable yerine png:

public Drawable getDrawable() {
  Resources res = c.getResources();
  Drawable d = res.getDrawable(android.R.drawable.bottom_bar);
  d.setBounds(0, 0, 100, 20);
  return d;
}

Sonra .png ama alanının bir parçası olan bir dize karakterleri görünmeyecektir görünecektir. Ne kadar bir sürede karakterleri özel bir şekil drawable arka planda görüntülenen alır bu arada ön görüntülenir böylece yapabilir miyim?

Ayrıca DynamicDrawableSpan sınıflara yerine ImageSpan kullanmaya çalıştı ama başarısız oldu.

CEVAP
2 HAZİRAN 2012, CUMARTESİ


Teşekkürler @yardımların için chrish. Burada şöyle yaptım:

final SpannableStringBuilder sb = new SpannableStringBuilder();
TextView tv = createContactTextView(contactName);
BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
bd.setBounds(0, 0, bd.getIntrinsicWidth(),bd.getIntrinsicHeight());

sb.append(contactName   ",");
sb.setSpan(new ImageSpan(bd), sb.length()-(contactName.length() 1), sb.length()-1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
to_input.setText(sb);

public TextView createContactTextView(String text){
  //creating textview dynamically
  TextView tv = new TextView(this);
  tv.setText(text);
  tv.setTextSize(20);
  tv.setBackgroundResource(R.drawable.oval);
  tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_clear_search_api_holo_light, 0);
  return tv;
}

public static Object convertViewToDrawable(View view) {
  int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
  view.measure(spec, spec);
  view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
  Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
            Bitmap.Config.ARGB_8888);
  Canvas c = new Canvas(b);
  c.translate(-view.getScrollX(), -view.getScrollY());
  view.draw(c);
  view.setDrawingCacheEnabled(true);
  Bitmap cacheBmp = view.getDrawingCache();
  Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
  view.destroyDrawingCache();
  return new BitmapDrawable(viewBmp);

}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • aki6336

    aki6336

    14 AĞUSTOS 2008
  • MobileTechReview

    MobileTechRe

    6 HAZİRAN 2008
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008