Contattare Bubble EditText

Sto cercando di creare le bolle di contatto nel MultiAutoCompleteTextView simili a come viene implementata nell'app Google+. Di seguito è riportto un colpo di schermo:

Google+ compone la schermata del post .

  • javax.net.ssl.sslpeerunverifiedexception nessun certificato peer
  • Uso dei colors per il nuovo tema di progettazione del materiale in Android
  • Aggiungere controlli di luminosità dello schermo all'applicazione android
  • Ioni Android: java.lang.IllegalStateException: buildToolsVersion non specificato
  • Vista galleggiante Android (oltre altre visualizzazioni)
  • Ordinare sortilegi Android per properties;
  • Ho cercato di estendere la class DynamicDrawableSpan per get un drawable spannable sullo background di un intervallo di text

     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; } } 

    Dove il mio drawable oval.xml è definito come così:

     <?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> 

    Nella mia class Attività che ha il MulitAutoCompleteTextView , ho impostato il livello della bolla come così:

     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); 

    Tuttavia, invece che la forma ovale che visualizza dietro i primi 6 caratteri della string, i caratteri non sono visibili e non c'è un disegnatore ovale in background.

    Se si modifica il metodo getDrawable () di BubbleSpan per utilizzare un .png anziché un disegno disegnabile:

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

    Poi verrà visualizzata la .png ma i caratteri della string che fanno parte della fascia non verranno visualizzati. Come posso farlo in modo che i caratteri nella fascia siano visualizzati in primo piano, nel frattempo un disegno personalizzato disegnato viene visualizzato in background?

    Ho tentato di utilizzare anche un ImageSpan invece di subclassare DynamicDrawableSpan ma non sono riuscito.

  • Area GPS in Android
  • Frammento frammento 2 che comunica
  • "Data irripetibile: 1302828677828" cercando di deserializzare con Gson una data di formato millisecondata ricevuta dal server
  • Posso avere un menu diverso per each scheda di TabHost
  • Avviare IntentService dall'attività e aggiornare l'attività quando IntentService è terminato
  • Come utilizzare frammenti in Android
  • 3 Solutions collect form web for “Contattare Bubble EditText”

    Grazie @chrish per tutto l'aiuto. Ecco come ho fatto:

     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); } 

    Ecco una soluzione completa per te

     //creating textview dynamicalyy TextView 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 spannableString public 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); } 

    Ecco il file di progetto completo, se uno di voi desidera utilizzare Spannble

    Ho una biblioteca che fa quello che stai cercando:

    • Impostazione predefinita o completamente personalizzabile (puoi anche utilizzare il tuo layout)
    • Supporto multilinea
    • Clicca l'ascoltatore

    Date un'occhiata qui

    Ecco un quickstart:

    Aggiungere ChipView al tuo layout o crearla in modo programmato:

     <com.plumillonforge.android.chipview.ChipView android:id="@+id/chipview" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

    Init con un elenco di dati che estendono Chip astratto e un ascoltatore click (se vuoi):

     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 viene eseguito come questo:

    Default ChipView

    Puoi personalizzare, comunque, dal livello complessivo al livello di chip:

    Complessivamente ChipView Custom ChipView

    Questo non è un MultiAutocomplete ma è ansible riuscire a imitarlo (in realtà sto usando così)

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.