Android:使用SpannableString實現圖片替換相應的文字

_小馬快跑_發表於2017-12-15

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"/>

然而效果是這樣的:

Android:使用SpannableString實現圖片替換相應的文字

圖片被當成整體排在了左邊,跟需求是不一樣的!下面用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是後臺返回的要顯示的字串,前面的空格是要用圖片替代的地方,最終效果圖如下:


Android:使用SpannableString實現圖片替換相應的文字

     跟需求是一樣的,嗯,就到這裡吧。

相關文章