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 .

  • scorrimento nidificato + recyclerview, comportmento strano di autoscroll
  • L'altezza della vista Nested Recycler non avvolge il suo contenuto
  • Come mettere a fuoco e mostrare la tastiera soft quando viene visualizzato un text EditText nella barra degli strumenti?
  • Motivo per cui "onSaveInstanceState" non viene chiamato quando viene premuto il button "Indietro"?
  • set Sfondo trasparente per avvisare il dialogo in android
  • Android proguard, Nullpointer Eccezione sul dispositivo
  • 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.

  • Attività Android a WebView e WebView al passaggio dei parametri attività
  • Android Studio - Imansible specificare il proprio minSdkVersion
  • Immagine di copia di Android dalla cartella della galleria nella cartella alternativa di SD Card
  • Sovrascrivere il button Home e Back è un caso boolean vero
  • Android - Impostare un bordo attorno a un ImageView
  • Richiedi il progetto Gradle da un'altra directory
  • 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.