如何解决当我设置 ImageSpan 和 ellipsize 时,我想看到......并且 ImageSpan 全部显示
这是我的 XML 布局:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textColor="@color/white"
android:ellipsize="end"
android:maxLines="2"
/>
我的代码:
val drawable = ContextCompat.getDrawable(requireSceneContext(),R.drawable.playing_com_into)!!
drawable.setBounds(0,dp2px(10),dp2px(10))
val text = "电影《We are all human》主题曲,电影《We are all human》主题曲,电影《We are all human》主题曲"
val span = QMUIAlignMiddleImageSpan(drawable,ALIGN_MIDDLE,-1f)
val spannableString = SpannableString(text)
spannableString.setSpan(span,text.length -2,text.length,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE )
binding.tv1.text = spannableString
当前效果
这是我现在得到的:
我要TextView优先显示ImageSpan,然后计算文本宽度
解决方法
我没有找到自定义 TextView 内部布局的方法。我在两行的情况下计算了文本的长度,然后减去一个字符的长度,然后设置文本和ImageSpan
这是我的代码
TextPaint paint = songDetailTv.getPaint();
int textViewWidth = (int) (container.getResources().getDisplayMetrics().widthPixels
- (2 * Resource.getDimension(R.dimen.player_recommend_margin_horizontal))
- (2 * Resource.getDimension(R.dimen.player_recommend_root_view_margin)));
int bufferWidth = (int) paint.getTextSize();
int textLength = textViewWidth * 2 - bufferWidth;
paint.setTextSize(songDetailTv.getTextSize());
CharSequence temp = TextUtils.ellipsize(detail.podcastIntro,paint,textLength * 1f,TextUtils.TruncateAt.END);
boolean isEllipsize = temp == detail.podcastIntro;
if (!isEllipsize) {
songDetailTv.setText(SpannableHelper.getPicAtEnd(R.drawable.playing_com_into,temp,-1));
} else {
songDetailTv.setText(detail.podcastIntro);
}
这是xml,maxline=2
<TextView
android:id="@+id/tv_song_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_song_publish_time"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="2"
android:textColor="#98999a"
android:textSize="12dp"
android:visibility="gone"
android:layout_marginTop="15dp"
tool:text="歌曲详情"
tool:visibility="visible" />
这是目前的效果 current effect
我不知道为什么计算有时不那么准确。这可能与 TextView 的布局有关。 但是可以忍受
,由于公司业务,除了需要添加Image外,还需要保留一些特殊的文字,所以我自定义了一个TextView来完成这个效果 This is code link github
这是目前的效果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。