2017-01-02 49 views
0

我有一個簡單的佈局,只包含一個TextViewImageSpan使用TextView和StaticLayout進行尺寸測量

我想使用ImageSpan將圖像加載到TextView

以下方法創建Spannable

private Spannable getImageSpannable(int drawableId, int targetWidth, int targetHeight) { 

    Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), drawableId); 

    Bitmap bitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); 
    Drawable dr = new BitmapDrawable(getResources(), bitmap); 
    dr.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); 

    Spannable imageSpannable = new SpannableString("\uFFFC"); 
    ImageSpan imgSpan = new ImageSpan(dr, DynamicDrawableSpan.ALIGN_BOTTOM); 

    imageSpannable.setSpan(imgSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return imageSpannable; 
} 

我用這個方法來像這樣創建內容:

public void setContent() { 

    SpannableStringBuilder content = new SpannableStringBuilder(); 
    content.append(getImageSpannable(R.drawable.my_image, 100, 260)); 
    content.append("\n"); 

    txtContent.setText(content); 
} 

當我打電話setContent()方法我的結果是這樣的:

Small gap above ImageSpan

如您所見,ImageSpan與TextView之間的差距很小。

這不是行距,因爲我設置行間距爲0

而且有趣的是,當我從內容中刪除「\ n」(在setContent方法中聲明)這個空間了。

另一點是,當我試圖在第0行的端底部以測量使用StaticLayout內容大小,用「\ n」個它返回270並且沒有「\ n」個返回260

此行爲對我造成一些困難,因爲我必須使用StaticLayout來測量文字和ImageSpan,並決定可以放入TextView的女巫。

我很感謝大家可以幫助我。

謝謝。

這裏是我的xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/txtContent" 
    android:layout_width="300dp" 
    android:layout_height="500dp" 
    android:background="#fed9f4" 
    android:textSize="22sp"/> 
</LinearLayout> 

心中已經做了一些測試,我發現,字體大小是影響ImageSpan渲染。

有人可以解釋這種影響嗎?

+0

發表您的XML –

回答

0

我希望這種方法可行

下面的代碼行

public void setContent() { 

    SpannableStringBuilder content = new SpannableStringBuilder(); 
    content.append(getImageSpannable(R.drawable.my_image, 100, 260)); 
    content.append("\n"); 

    txtContent.setText(content); 
} 

更改爲

public void setContent() { 

    SpannableStringBuilder content = new SpannableStringBuilder(); 
    content.append(getImageSpannable(R.drawable.my_image, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    content.append("\n"); 

    txtContent.setText(content); 
} 

和調整 「R.drawable.my_image」 尺寸

+0

我不想將圖像大小調整爲WRAP_CONTENT。我必須調整它到特定的大小 – Hojjat