2010-07-04 8 views

Odpowiedz

91

Znaleziono następujące i wydaje się, aby wykonać zadanie:

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());' jest kluczem do kanału alfa, które nie posiadają wewnętrznych granic. –

+0

Funkcja getDrawable amortyzowana proszę zaktualizować odpowiedź –

+1

Jeśli chcę dostosować położenie ImageSpan wewnątrz ciągu spannable .. ? Przykład Chcę dać margines 10 dp od dołu do Imagspan. – Khay

17

SpannableString + ImageSpan nie działają w Android API 21 & 22 (I przetestowane w Android Studio 1.2. 1.1 w emulatorze), ale jeśli to zrobisz:

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

SpannableString + ImageSpan zadziała.

Zainspirował mnie ten post: https://stackoverflow.com/a/26959656/3706042

+2

Moje urządzenie z uruchomionym API '22' wyświetla' SpannableString' + 'ImageSpan' fine. Używam 'VectorDrawable's though ... – Sakiboy

+0

Naprawdę masz rację +1! Ta magiczna metoda sprawia, że ​​działa – Corbella

Powiązane problemy