2010-07-04 11 views
45

Ich bin auf der Suche nach einem Beispiel für die Erstellung und Anzeige von SpannableString mit Bildspannen. So etwas wie die Inline-Anzeige von Smileys.SpannableString mit Bild Beispiel

Vielen Dank

Antwort

91

die folgenden, und es scheint gefunden, den Job zu tun:

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 = getResources().getDrawable(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); 
} 
+2

'd.setBounds (0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());' ist der Schlüssel für Drawables, die keine inneren Grenzen haben. –

+0

getDrawable Funktion abgeschrieben Bitte aktualisieren Sie Ihre Antwort –

+1

Wenn ich die Position des ImageSpan innerhalb der spannbar .. Zeichenfolge anpassen möchte? Beispiel Ich möchte einen Abstand von 10 dp von unten zur Imagspan geben. – Khay

17

SpannableString + ImageSpan funktionieren nicht in Android API 21 & 22 (I in Android Studio 1.2 getestet. 1.1 im Emulator), aber wenn Sie dies tun:

TextView textView = (TextView) findViewById(R.id.textview); 
textView.setTransformationMethod(null); 
... 
textView.setText(ss); 

SpannableString + ImageSpan wird funktionieren.

ich von diesem Beitrag inspiriert wurde: https://stackoverflow.com/a/26959656/3706042

+2

Mein Gerät, das die API '22' ausführt, zeigt 'SpannableString' +' ImageSpan' an. Ich benutze 'VectorDrawle's obwohl ... – Sakiboy

+0

Sie sind tatsächlich richtig +1 !! Diese magische Methode macht es funktioniert – Corbella