ListView中TextView重叠问题:如何实现三个TextView同行显示
嘿,这个问题我之前做项目时也遇到过!你的核心问题是第一个TextView的宽度和约束没设置对,导致文本过长时直接挤占了后面两个TextView的空间。我给你两个实用的解决方案:
解决方案一:调整ConstraintLayout的约束(推荐)
利用ConstraintLayout的弹性布局特性,让第一个TextView在不挤压右侧控件的前提下,自动占据可用空间:
- 把第一个TextView(
ingredientName)的android:layout_width从wrap_content改成0dp(即match_constraint) - 给它添加
app:layout_constraintEnd_toStartOf="@+id/quantity"约束,绑定到第二个TextView的左端 - 可选:保留
android:lines="3"让文本换行,加上android:ellipsize="end",当文本超过3行时显示省略号
修改后的ingredientName代码:
<TextView android:id="@+id/ingredientName" style="@style/MyTextFont" android:lines="3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="28dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" android:text="TextView" android:ellipsize="end" android:scrollHorizontally="false" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@+id/quantity" app:layout_constraintTop_toTopOf="parent" />
右侧的quantity和measureTv保持原有约束即可,这样第一个TextView会自动填充左侧可用空间,文本过长时会换行,完全不会和右侧控件重叠。
解决方案二:改用LinearLayout(更简单直观)
如果觉得ConstraintLayout的约束逻辑有点绕,可以把根布局换成LinearLayout,通过layout_weight分配空间:
完整的列表项布局示例:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:orientation="horizontal" android:gravity="center_vertical"> <TextView android:id="@+id/ingredientName" style="@style/MyTextFont" android:lines="3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_marginStart="28dp" android:layout_marginEnd="8dp" android:text="TextView" android:ellipsize="end" android:scrollHorizontally="false" /> <TextView android:id="@+id/quantity" style="@style/MyTextFont" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="2dp" android:text="TextView" /> <TextView android:id="@+id/measureTv" style="@style/MyTextFont" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:text="TextView" /> </LinearLayout>
这里通过layout_weight="1"让第一个TextView占据除右侧两个控件外的所有水平空间,文本过长时自动换行,彻底解决重叠问题。
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

