Contact Bubble EditText
Thanks @chrish for all the help. So here is how i did it:
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);}
Here is a complete Solution for you
//creating textview dynamicalyyTextView textView=new TextView(context);textview.setText("Lauren amos");textview.setbackgroundResource(r.color.urovalshape);textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.icon_cross, 0);BitmapDrawable dd = (BitmapDrawable) SmsUtil.getDrawableFromTExtView(textView);edittext.settext(addSmily(dd));//convert image to spannableStringpublic SpannableStringBuilder addSmily(Drawable dd) { dd.setBounds(0, 0, dd.getIntrinsicWidth(),dd.getIntrinsicHeight());SpannableStringBuilder builder = new SpannableStringBuilder();builder.append(":-)");builder.setSpan(new ImageSpan(dd), builder.length() - ":-)".length(),builder.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);return builder;} //convert view to drawable public static Object getDrawableFromTExtView(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.getWidth(), view.getHeight(), 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);}
Here is the complete project file ,if any of you want to useSpannble
I got a library which does what you're looking for with :
- Default or fully customizable (you can even use your own layout)
- Multiline support
- Click listener
Here a quickstart :
Add ChipView to your layout or create it programmatically :
<com.plumillonforge.android.chipview.ChipView android:id="@+id/chipview" android:layout_width="match_parent" android:layout_height="wrap_content" />
Init it with a list of data which extend abstract Chip and a click listener (if you want) :
List<Chip> chipList = new ArrayList<>();chipList.add(new Tag("Lorem"));chipList.add(new Tag("Ipsum dolor"));chipList.add(new Tag("Sit amet"));chipList.add(new Tag("Consectetur"));chipList.add(new Tag("adipiscing elit"));ChipView chipDefault = (ChipView) findViewById(R.id.chipview);chipDefault.setChipList(chipList);chipDefault.setOnChipClickListener(new OnChipClickListener() { @Override public void onChipClick(Chip chip) { // Action here ! } });
Default ChipView is rendered like this :
But you can customise as you like from overall to Chip level :
This isn't a MultiAutocomplete but you can manage to mimic it (I'm actually using it like that)