我有一个简单的布局,只包含一个TextView
.
我想TextView
使用 ImageSpan 加载图像。
下面的方法创建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 和 top of 之间存在很小的差距TextView
。
这不是行距,因为我将行距设置为 0。
有趣的一点是,当我从内容(在 setContent 方法中声明)中删除“\n”时,这个空间就消失了。
另一点是,当我尝试使用 测量内容大小时StaticLayout
,在第 0 行的末尾带有“\n”,它返回 270,没有“\n”,它返回 260。
这种行为给我带来了一些困难,因为我必须测量 text 和 ImageSpan 使用StaticLayout
并决定一个可以适应的女巫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 渲染。
有人可以解释一下这种影响吗?