Wenden Sie sich an Bubble EditText

Ich versuche Kontaktblasen in der zu erzeugenMultiAutoCompleteTextView Ähnlich wie in der Google+ App implementiert. Unten ist ein Screenshot:

.

Ich habe versucht, die zu verlängernDynamicDrawableSpan Klasse, um ein spannbares Zeichen im Hintergrund einer Textspanne zu erhalten

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

Wo meine oval.xml drawable so definiert ist:

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

In meiner Aktivitätsklasse hat das dieMulitAutoCompleteTextViewIch stelle die Blasenspanne so ein:

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

Anstelle der ovalen Form, die hinter den ersten 6 Zeichen in der Zeichenfolge angezeigt wird, sind die Zeichen jedoch nicht sichtbar und im Hintergrund kann kein Oval gezeichnet werden.

Wenn ich die getDrawable () -Methode von BubbleSpan ändere, um eine .png-Datei anstelle einer darstellbaren Form zu verwenden:

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

Dann wird die PNG-Datei angezeigt, aber die Zeichen in der Zeichenfolge, die Teil des Bereichs sind, werden nicht angezeigt. Wie kann ich dafür sorgen, dass die Zeichen im Bereich im Vordergrund angezeigt werden, während im Hintergrund eine benutzerdefinierte Form angezeigt wird, die gezeichnet werden kann?

Ich habe versucht, auch eine zu verwendenImageSpan statt UnterklassenDynamicDrawableSpan war aber erfolglos.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage