Ich suche nach einem Beispiel, wie man Android SpannableString mit ImageSpan erstellen und anzeigen kann. Etwas ähnliches wie die Inline-Anzeige von Smileys.
Vielen Dank.
Ich suche nach einem Beispiel, wie man Android SpannableString mit ImageSpan erstellen und anzeigen kann. Etwas ähnliches wie die Inline-Anzeige von Smileys.
Vielen Dank.
Ich habe das Folgende gefunden und es scheint zu funktionieren:
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView textView = (TextView) findViewById(R.id.textview);
SpannableString ss = new SpannableString("abc");
Drawable d = ContextCompat.getDrawable(this, R.drawable.icon32);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(ss);
}
SpannableString + ImageSpan funktionieren nicht in Android API 21 & 22 (Ich habe es in Android Studio 1.2.1.1 im Emulator getestet), aber wenn du dies tust:
TextView textView = (TextView) findViewById(R.id.textview);
textView.setTransformationMethod(null);
...
textView.setText(ss);
SpannableString + ImageSpan wird funktionieren.
Ich wurde von diesem Beitrag inspiriert: https://stackoverflow.com/a/26959656/3706042
Wenn noch Interesse besteht, habe ich eine Java-Methode erstellt, um rekursiv aufgelistete Zeichenfolgen einem Text hinzuzufügen (der am Ende auf einen textView gesetzt wird) basierend auf einer "Zeichenfolge zum Ersetzen".
public void appendImages(@NonNull TextView textView,
@NonNull String text,
@NonNull String toReplace,
Drawable... drawables){
if(drawables != null && drawables.length > 0){
//Liste der übereinstimmenden Positionen, falls vorhanden
List positions = new ArrayList<>();
int index = text.indexOf(toReplace);
while (index >= 0) {
//Position hinzufügen
positions.add(index);
index = text.indexOf(toReplace, index + toReplace.length());
}
if(positions.size() > 0 && drawables.length >= positions.size()){
textView.setTransformationMethod(null);
SpannableString ss = new SpannableString(text);
int drawablesIndex = 0;
for(int position : positions){
Drawable drawable = drawables[drawablesIndex++];
//Erforderlich für Zeichenfolgen
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ss.setSpan(new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE), position, position+toReplace.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
textView.setText(ss);
}
else Timber.w("Die Anzahl der zu ersetzenden Übereinstimmungen beträgt %s und die Anzahl der anzuwendenden Zeichenfolgen beträgt %s", positions.size(), drawables.length);
}
else Timber.w("Das Array der Zeichenfolgen ist null oder leer.");
}
Verwendung:
appendImages(myTextView, "Dies ist ein ^ einfacher ^ Test", "^", drawable1, drawable2);
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.