ConstraintLayout中TextView末尾省略+drawableEnd紧跟文本的实现问题
解决AppCompatTextView文本省略后图标紧跟文本的问题
你的问题根源在于android:layout_width="0dp"让TextView占满了约束分配的宽度,导致drawableEnd图标对齐到控件右边界,而非文本末尾。以下两种方案可以解决这个问题:
方案一:利用ConstraintLayout约束宽度属性
修改TextView的布局参数,将宽度设为wrap_content,同时开启layout_constrainedWidth属性,让TextView在不超出父布局边界的前提下自适应文本宽度,此时图标会自动紧跟在文本(或省略号)后方:
<androidx.appcompat.widget.AppCompatTextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" app:layout_goneMarginStart="0dp" android:layout_marginBottom="1dp" android:includeFontPadding="false" android:maxLines="1" android:ellipsize="end" app:layout_constrainedWidth="true" <!-- 核心控制属性 --> app:layout_constraintStart_toEndOf="@+id/iv" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/other_tv" tools:drawableEnd="@drawable/icon" tools:text="TestTestTestTestTest" />
方案二:用LinearLayout组合TextView与ImageView(更灵活)
如果需要精细调整图标与文本的间距、图标尺寸,可放弃drawableEnd,改用LinearLayout将两者组合:
<LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" app:layout_constraintStart_toEndOf="@+id/iv" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/other_tv"> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/tv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginEnd="8dp" <!-- 自定义文本与图标间距 --> android:includeFontPadding="false" android:maxLines="1" android:ellipsize="end" tools:text="TestTestTestTestTest" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" /> </LinearLayout>
方案一简洁高效,适合原生drawable场景;方案二自由度更高,方便扩展样式。
内容的提问来源于stack exchange,提问作者Mihail Lovchitskiy
相关产品推荐
相关产品推荐

