我有一个简单的布局,只包含一个TextView
。ImageSpan使用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()
方法我的结果是这样的:
如您所见,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渲染。
有人可以解释这种影响吗?
发表您的XML –