如标题所说的,我在开发直播间的消息列表功能时,遇到了需要将礼物图片和提示消息文本展示出来,然后在刷新插入的字符拼接图片的item时显示宽度的不对问,需要经过滑动才能获取正确宽度。
代码如下:
spanString = new SpannableStringBuilder(sendName + " 送出" + item.getContent() +" ");
spanString.setSpan(new ForegroundColorSpan(calcNameColor(sendName)),
0, sendName.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
spanString.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.yellow)),
sendName.length(), spanString.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
Glide.with(mContext).load(item.getImage()) .override(DisplayUtil.dip2px(mContext,15), DisplayUtil.dip2px(mContext,15)).into(new CustomTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
//替换最后一个字符为图片
SpannableStringBuilder span1 ;
spanString.setSpan(new ImageSpan(Objects.requireNonNull(resource)), spanString.length()-1, spanString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
// 改变礼物数量文本颜色
span1 = new SpannableStringBuilder("x"+item.getNum()+"");
span1.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.white)),
0, span1.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
spanString.append(span1);
holder.sendContext.setText(spanString);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
显示效果问题:
我的解决办法是:对需要进行拼接的图片资源在拼接前设置宽高大小
resource.setBounds(0, 0, resource.getIntrinsicWidth(), resource.getIntrinsicWidth());
加上这行代码之后显示,不会出现获取宽度不对的情况,但有出现新的问题,就是当文本长度刚好换行时会出现拼接的图片不显示的问题,效果如下:
我的解决办法是:把用来给图片替代拼接的占位空格字符换成"\uFFFC"
最后代码:
spanString = new SpannableStringBuilder(sendName + " 送出" + item.getContent() +"\uFFFC");
spanString.setSpan(new ForegroundColorSpan(calcNameColor(sendName)),
0, sendName.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
spanString.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.yellow)),
sendName.length(), spanString.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
Glide.with(mContext).load(item.getImage()).into(new CustomTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
//设置图片的大小
resource.setBounds(0, 0, resource.getIntrinsicWidth(), resource.getIntrinsicWidth());
//替换最后一个字符为图片
spanString.setSpan(new ImageSpan(Objects.requireNonNull(resource)), spanString.length()-1, spanString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
// 改变礼物数量文本颜色
SpannableStringBuilder span1 = new SpannableStringBuilder("x"+item.getNum()+"");
span1.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.white)),
0, span1.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
spanString.append(span1);
holder.sendContext.setText(spanString);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
这是我开发直播间消息列表需要展示礼物赠送消息时所遇到的坑,记录一下,方便自己方便他人,第一次写博客,文笔不会请见谅。