ConstraintLayout中带drawableEnd属性的TextView换行异常问题
问题根源
你遇到的问题根源是drawableEndCompat属性是将图片绑定在TextView控件自身的右边缘,而非文字内容的末尾。当你给TextView设置宽度为0dp且约束到父布局右边缘时,控件会默认撑满可用横向空间,短文本状态下图片自然会停在屏幕最右侧,不会跟随文本位置移动。
解决方案
方案1:修改TextView约束配置(最简便,无需新增控件)
直接修改subscription_row_item_title的属性即可:
- 把
android:layout_width从0dp改为wrap_content - 保留原有的
app:layout_constraintStart_toEndOf="@id/subscription_row_item_thumb"、app:layout_constraintEnd_toEndOf="parent"属性 - 新增
app:layout_constraintHorizontal_bias="0"属性,保证控件始终靠左对齐 - 保留
app:layout_constrainedWidth="true"属性,确保文本长度超过可用空间时会自动换行,不会超出父布局边界
修改后的TextView代码如下:
<TextView android:id="@+id/subscription_row_item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:breakStrategy="simple" android:layout_marginStart="15dp" android:textSize="16sp" app:layout_constrainedWidth="true" app:drawableEndCompat="@drawable/ic_action_open_episode_list" android:drawablePadding="10dp" app:layout_constraintTop_toTopOf="@id/subscription_row_item_thumb" app:layout_constraintBottom_toBottomOf="@id/subscription_row_item_thumb" app:layout_constraintStart_toEndOf="@id/subscription_row_item_thumb" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0"/>
方案2:拆分文本与小图为独立控件(适配性更强)
如果需要对小图做单独的点击事件、样式调整,可放弃drawableEnd方案,新增独立ImageView:
- 新增小图ImageView控件,约束其顶部、底部与TextView对齐,起始位置与TextView末尾对齐
- 修改TextView的end约束到小图的起始位置
- 给两个控件设置横向打包链,保证短文本状态下整体靠左对齐,长文本状态下TextView自动换行
内容的提问来源于stack exchange,提问作者Kris B
相关产品推荐
相关产品推荐

