如何在Android中的TextView中换行文本

110

有没有人知道如何在Android平台中的TextView中换行文本。即,如果textview中的文本超过屏幕长度,则应在第二行显示。

我已经搜索并尝试了以下内容:

android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"

但是没有一个起作用...

有人能建议我该如何做吗。


7
默认情况下,TextView应该自动换行。你能贴出整个布局吗? - danh32
你的TextView是否在TableLayout中?如果是,我可以为你提供答案。 - JohnFx
1
在我的情况下,我添加了大约半打属性(如下所述)来强制textview将文本换行到多行,但没有成功。后来我注意到我有一个属性**android:inputType="textPersonName"**。显然,这是由Android Studio设计工具添加的。删除该属性解决了问题!可能还有其他输入类型也会阻止换行。 - LarsH
18个回答

75

约束布局

<TextView
android:id="@+id/some_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • 确保您的布局宽度为零
  • 定义左/右约束
  • wrap_content的布局高度允许向上/向下扩展。
  • 设置android:maxLines="2"以防止垂直扩展(2只是一个例子)
  • 椭圆可能是一个好主意,与最大行数一起使用android:ellipsize="end"

0dp宽度允许左/右约束确定您的小部件有多宽。

设置左/右约束设置实际宽度,文本将根据其中自动换行。

约束布局文档


2
是的!这正是它的工作原理!只需确保将宽度设置为0dp即可。 - Yoraco Gonzales
设置左右约束有助于使文本自动换行,而不是超出右边界。 - Jia Tse
这在LinearLayout中无法工作,如果侧边有其他控件,它将把它们推出屏幕。 - Emil

65

对我来说,这个问题只在Android < 4.0上出现。

我使用的参数组合是:

android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

maxLines 的数量似乎是让我的 TextView 换行的随机关键因素。


12
我知道这是一个旧的帖子,但我想分享我的发现。我只使用了“android:maxLines”,然后它就自动换行了。感谢@Guykun。 - StuStirling
再次强调,这等同于将TextView的高度设置为“match_parent”,这与使TextView的高度扩展以包括额外行是不同的。 - SMBiggs

36

如果 TextView 位于 TableLayout 中,解决方案是在 TableLayout 上设置 android:shrinkColumns="1"。(将 1 替换为要包装的 TextView 所在的列号(从 0 开始)。)

据我所知,TextView 上不需要任何其他属性。

对于其他情况,请参见此处的其他答案。

顺便说一句,我最初用以下方式使其部分工作:

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

但这导致对话框底部出现了一些额外的空白。


这正是我在寻找的!否则我的话会被截断。 - Carson Holzheimer
“stretchColumns”在表格上对我也很有效,实际上给了我更好的结果。 - Jasper de Vries

20

AppCompatTextView中使用app:breakStrategy="simple",它会控制段落布局。

它有三个常量值:

  • balanced(平衡)
  • high_quality(高质量)
  • simple(简单)

在您的TextView xml中进行设计

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textquestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scrollHorizontally="false"
        android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:breakStrategy="simple" />
如果您当前的最低API级别为23或更高,则在编码中:
yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

如需更多参考,请参阅BreakStrategy

Textview breakStrategy image


13

您必须使用两个参数:

  • android:ellipsize="none":文本不会在文本视图宽度上被截断

  • android:scrollHorizontally="false":文本根据需要换行到尽可能多的行


6
对我来说这不起作用。(顺便说一下,我在TableLayout中的TableRow中有一个TextView。) - aij

8
这应该可以解决您的问题:android:layout_weight="1"

这只会导致TextView扩展以尽可能占用空间,这与将高度设置为“match_parent”相同。并不完全是OP想要的东西。 - SMBiggs
3
在TableLayout中,layout_weight="1" 修复了我的问题。然而,我的包含TextView的TableRow,layout_height设为特定值。也许对某些人有用。 - kit

5

好的,各位,事实上真相在两者之间,因为你需要从家长和孩子的角度来看待这个问题。以下解决方案仅适用于旋转模式=dialog,无论Android版本(在VD和DesireS上测试过,Android=>2.2没有问题):

  1. .Set you spinner's(the parent) mode like :

    android:spinnerMode="dialog"  
    
  2. Set the textview's(child custom view) properties to :

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    
我希望这对你也有效。

尝试了很多方法让它在“下拉”模式下工作,但都没有成功。现在已经选择使用“对话框”模式。 - Mangesh

5
通过设置android:maxEms的值,再搭配android:layout_weight="1"属性,当TextView达到ems的给定长度时,它将自动换行。

也适用于放置在RelativeLayout中的TextView。 - ayz4sci
我已经搜索了几个小时,谢谢,它在ConstraintLayout上也非常好用。 - TarekB

3
在Android Studio 2.2.3中,inputType属性下有一个名为textMultiLine的属性。选择此选项可以解决类似问题。希望这能帮到您。

3
这是针对EditText而不是Textview。 - Jakub S.

2

我刚刚在RecyclerView内部的布局中操作了一个TextView。我的文本被割掉了,例如对于Read this message,我只看到Read this。我尝试在TextView上设置android:maxLines="2",但是没有任何变化。然而,android:lines="2"会在第一行显示Read this,第二行显示message


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