2010-07-04 8 views
45

이미지 스팬이있는 SpannableString을 만들고 표시하는 방법의 예를 찾고 있습니다. 스마일의 인라인 디스플레이와 같은 것. 다음과 일을 할 것 같다 찾을 수이미지가 포함 된 SpannableString

덕분에 많은

답변

91

:

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는());'고유 경계가없는 드로어 블 열쇠입니다. –

+0

getDrawable 함수가 저하되었습니다. 답변을 업데이트하십시오. –

+1

범위 내에서 ImageSpan의 위치를 ​​조정하려면 .. 문자열을 변경 하시겠습니까? 예 아래에서 Imagspan까지 10 dp의 여백을주고 싶습니다. – Khay

17

SpannableString + ImageSpan 21 & (22) 안드로이드 API에서 작동하지 않습니다는 (I 안드로이드 스튜디오 1.2에서 테스트. 1.1 in 에뮬레이터).이 작업을 수행하는 경우 :

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

SpannableString + ImageSpan이 작동합니다.

나는이 게시물에 의해 영감을했다 : https://stackoverflow.com/a/26959656/3706042

+2

API '22'를 실행하는 장치는'SpannableString' +'ImageSpan'을 잘 보여줍니다. 그래도 VectorDrawable을 사용하고 있습니다 ... – Sakiboy

+0

당신은 실제로 +1 +1입니다! 이 마법 방법으로 효과적입니다. – Corbella

관련 문제