RelativeLayout中TextView设置ellipsize无效且0dp不显示问题咨询
问题原因与解决方案
为什么TextView不显示/无法截断?
在RelativeLayout里,android:layout_width="0dp"完全没用——RelativeLayout不像LinearLayout那样靠layout_weight分配空间,它的控件大小得靠相对位置约束或者明确的尺寸值来定。你只给TextView加了layout_alignParentEnd="true"(靠右对齐),但没设置左边界的约束,导致系统计算出来的宽度是0,自然就看不到文本了。
换成wrap_content时,TextView宽度跟着文本走,如果文本没超出父容器的宽度,ellipsize="end"的截断逻辑根本不会触发,所以只会完整显示文本,不会截断。
两种解决办法
办法1:给TextView加上左边界约束(继续用RelativeLayout)
让TextView的左边和父容器左边对齐,同时设layout_width="match_parent",这样TextView会占满父容器的宽度,文本超出就会自动截断:
<TextView android:id="@+id/userNameTxt" android:fontFamily="@font/robotocondensedmedium" android:textColor="@color/white" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:textSize="33sp" android:ellipsize="end" android:layout_alignParentEnd="true" android:layout_alignParentStart="true"/>
要是TextView左边需要留空隙,再加个android:layout_marginStart="xxdp"调整就行。
办法2:改用LinearLayout(更适合空间分配场景)
如果你的布局逻辑更适合线性布局,把外层换成LinearLayout,给TextView设layout_weight="1"+layout_width="0dp",它就会占满剩余空间,文本超出就截断:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginStart="10dp" android:layout_marginEnd="10dp" android:layout_marginTop="6dp" android:gravity="center_vertical"> <!-- 这里可以放其他同级控件 --> <TextView android:id="@+id/userNameTxt" android:fontFamily="@font/robotocondensedmedium" android:textColor="@color/white" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:maxLines="1" android:textSize="33sp" android:ellipsize="end"/> </LinearLayout>
关键提醒
ellipsize="end"要生效,必须同时满足三个条件:
- TextView的宽度是固定的(或者被约束死,不能随文本无限扩展)
- 文本长度超过了TextView的宽度
- 设置了
maxLines="1"(别用过时的singleLine="true")
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

