google官網地址:
developer.android.com/reference/a…
This is the class for text whose content is immutable but to which markup objects can be attached and detached.
For mutable text, see SpannableStringBuilder.
這類文字的內容是不變的,但標記物件可以被附加和分離。如果目標是可變文字,看SpannableStringBuilder
最近專案中有個需求,圖片和文字一塊排版,最多顯示兩行,最開始想到的就是在TextView裡面設定android:drawableLeft="@mipmap/tonbaopay_icon"顯示圖片並用android:drawablePadding="10dp"來控制圖片和文字之間的距離,附XML程式碼:
<TextView
android:id="@+id/tv_goodscar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@mipmap/tonbaopay_icon"
android:drawablePadding="10dp"
android:layout_marginLeft="13dp"
android:layout_marginRight="15dp"
android:layout_toRightOf="@id/iv_goodscar_img"
android:maxLines="2"
android:paddingTop="7dp"
android:text="title"
android:textColor="#333333"
android:textSize="14sp"/>
然而效果是這樣的:
圖片被當成整體排在了左邊,跟需求是不一樣的!下面用SpannableString來實現一下,
XML程式碼:
<TextView
android:id="@+id/tv_goodscar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="13dp"
android:layout_marginRight="15dp"
android:layout_toRightOf="@id/iv_goodscar_img"
android:maxLines="2"
android:paddingTop="7dp"
android:text="title"
android:textColor="#333333"
android:textSize="14sp"/>
在程式碼中寫:
SpannableString msp =newSpannableString(" "+ goodsCart.goods.name);
Drawable rightDrawable =getResources().
getDrawable(R.mipmap.tonbaopay_icon);
rightDrawable.setBounds(0,0,
rightDrawable.getIntrinsicWidth(), rightDrawable.getIntrinsicHeight());
msp.setSpan(new ImageSpan(rightDrawable),0,1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
cellHolder.tv_goodscar_title.setText(msp);
其中goodsCart.goods.name是後臺返回的要顯示的字串,前面的空格是要用圖片替代的地方,最終效果圖如下:
跟需求是一樣的,嗯,就到這裡吧。