如何在一行放置TextView与ImageView并解决文本挤压问题
解决TextView文本过长挤掉右侧ImageView的问题
嘿,这个布局问题我之前做项目时也碰到过,刚好能帮你搞定!
问题回顾
你在水平方向的LinearLayout里放了TextView和ImageView,本来想让ImageView一直紧贴在TextView右边,但TextView文本一长,就把ImageView挤到屏幕外面去了。想要实现TextView单行显示,超出部分用省略号截断,同时ImageView稳稳待在右侧。
初始布局的问题所在
你原来的布局里,LinearLayout宽度是match_parent,TextView用的是wrap_content宽度——当文本过长时,TextView会尽可能占满整个LinearLayout的宽度,直接把ImageView挤没了,这就是问题根源。
可行的解决方案
只需要调整两个关键属性就能解决,看下面的布局代码:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="horizontal"> <TextView android:layout_width="0dp" <!-- 推荐用0dp,配合weight分配空间更高效 --> android:layout_height="wrap_content" android:layout_weight="1" android:singleLine="true" android:ellipsize="end" <!-- 显式指定省略号在末尾,兼容更多系统版本 --> android:textSize="20dp" android:text="12345678901234567000000000000000000" /> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:src="@android:drawable/btn_radio" /> </LinearLayout>
关键逻辑说明
android:layout_weight="1":给TextView设置权重后,LinearLayout会先给ImageView分配它需要的固定宽度(32dp),剩下的所有空间全部分配给TextView,这样TextView就不会再无限扩张挤掉ImageView了。android:singleLine="true"+android:ellipsize="end":强制TextView只能单行显示,当文本超出分配的空间时,自动在末尾显示省略号,完美实现你要的效果。- 为啥推荐把TextView的
layout_width设为0dp?因为如果用wrap_content,系统会先计算文本的完整宽度,再按权重分配空间,有点多余;用0dp的话,系统直接按权重给TextView分配空间,更高效哦。
内容的提问来源于stack exchange,提问作者sunjinbo
相关产品推荐
相关产品推荐

