多行文本视图宽度为“wrap_content”

21
我在思考如何让一个 TextView 显示在多行上,而不需要在 XML 中硬编码宽度
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="false"
            android:text="Long multiline text"/>

        <TextView
            android:textColor="@color/text_color"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            />

    </LinearLayout>

希望听到任何想法。

编辑:我的问题是,当文本超出设置的宽度(因为它达到屏幕的末端)时,一部分文本就不会显示。我希望文本能够分成两行显示。


1
我对你想要的内容感到困惑。当TextView达到其父级的宽度时,就会开始新的一行。除此之外,你希望在哪里进行换行?你可以使用以下代码手动换行:android:text="长文本\n多行\n文本"。你也可以使用maxWidth属性将TextView包裹在内容周围,直到达到所需的宽度。 - Sam
TextView 的默认行为不就是这样吗?如果你移除 maxLinessingleLine 会发生什么呢? - nhaarman
如果我将layout_width设置为固定值,它可以工作。但是我不能这样做,因为TextView必须填充可用空间。 - znat
它在一个LinearLayout中。我已经将其添加到问题中。 - znat
你真的需要第二个具有固定宽度的 TextView 吗? - nhaarman
显示剩余3条评论
4个回答

24

虽然我无法重现不换行的问题,但您可以在第一个TextView上使用weight来解决定位问题。使用以下XML将在Eclipse的图形布局视图中获得预期的输出:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:orientation="horizontal">

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:singleLine="false"
        android:text="Long multiline text"/>

    <TextView
        android:textColor="@color/text_color"
        android:layout_width="130dp"
        android:layout_height="wrap_content"
        />

</LinearLayout>

3
真是一个荒谬的bug! - shimatai
2
android:singleLine现在已被弃用。 - Tom Bevelander

3
此外,还需添加以下内容。
android:minLines="2"
android:scrollHorizontally="false"

0

你可以尝试一下

android:inputType="textMultiLine"

在你的TextView XML中添加这段代码。这对我有用。


5
这是错误的 - android:inputType 只应用于 EditText - 对于 TextView,请使用 singleLine = false。 - RMcGuigan
@RMcGuigan,TextView还有一个名为android:inputType的XML属性。请参见https://developer.android.com/reference/android/widget/TextView。 - remykarem
是的,它确实可以用来设置TextView为多行 - 根据lint警告,但不应该使用。请参阅我的原始评论以获取正确的解决方案。 - RMcGuigan

0

我认为我曾经有过非常相似的问题。 我有一个带有文本的TextView,我不确定它会占用多少行。它被一个LinearLayout封装,具有android:layout_width="match_parent",以确保我的文本会水平填满所有空间。 但是,问题是我的文本不能放在一行中,并且当它断成一个新行时,下面的视图组件没有向下移动,以便第二行能够完全可见。

通过将包含我的TextViewLinearLayout更改为一个RelativeLayout,我可以实现解决方案。 通过这种方式,文本下面的元素(实际上是下面的布局本身)自动移动,以给多行文本留出足够的空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接