You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListView中TextView重叠问题:如何实现三个TextView同行显示

嘿,这个问题我之前做项目时也遇到过!你的核心问题是第一个TextView的宽度和约束没设置对,导致文本过长时直接挤占了后面两个TextView的空间。我给你两个实用的解决方案:

解决方案一:调整ConstraintLayout的约束(推荐)

利用ConstraintLayout的弹性布局特性,让第一个TextView在不挤压右侧控件的前提下,自动占据可用空间:

  1. 把第一个TextView(ingredientName)的android:layout_width从wrap_content改成0dp(即match_constraint)
  2. 给它添加app:layout_constraintEnd_toStartOf="@+id/quantity"约束,绑定到第二个TextView的左端
  3. 可选:保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:43:02