如何在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个回答

2
尝试使用 @Guykun 的方法。
android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

此外,请确保父元素的宽度不设置为自适应内容。这是我之前忽略的事情。

1
你所需做的就是设置你的 文本视图宽度

android:layout_width="60dp"

你可以根据自己的选择更改宽度。只需输入长句以检查是否像这样工作

android:text="我希望成为世界一流的软件工程师"


1

我遇到了同样的问题。进行以下更改使其正常运行 -

android:layout_width="wrap_content"

省略号、maxLines或layout_weight都没有产生任何影响。 注意:父宽度也设置为wrap_content。

0

我正在使用Android 2.2,如果文本超出屏幕,我的textview将自动换行。

如果您想在屏幕末尾之前使文本换行,请添加(只需放入您自己的dp值)。 如果您在文本右侧有一张图片,这将非常有用。

android:layout_marginRight="52dp"

0

有趣的是——我在代码中创建了TextView并且它自动换行,尽管我除了一些标准设置之外没有设置任何东西——不过你可以亲自看看:

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

从参数定义中可以看出,我正在使用LinearLayout。Label类只是扩展了TextView - 在那里除了设置字体大小和字体颜色之外没有做任何事情。

在模拟器(API Level 9)中运行时,它会自动将文本换行成3行。


请注意代码中的使用 LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);。很可能它会自动实现你认为的“自动换行”。 - JWL

0
只需将layout_with设置为固定大小,当文本填满最大宽度时,它会溢出到下一行,从而产生换行效果。
<TextView
    android:id="@+id/segmentText"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/segmentHeader"
    android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

0

关键在于textView的宽度,尝试将其设置为固定数字,例如:

<TextView
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

我尝试了许多解决方案,但没有任何结果,我尝试过:

    android:ellipsize="none"
    android:scrollHorizontally="false"

唯一触发换行选项的是专用宽度


你是在一个LinearLayout中进行操作吗?因为在android:layout_height="wrap_content"的LinearLayout中,它仍然会延伸到下一行。 - Emil

-1
你需要将TextView添加到一个ScrollView中,类似于以下代码:
<ScrollView android:id="@+id/SCROLL_VIEW"  
android:layout_height="150px"   
android:layout_width="fill_parent">  

<TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>

4
谢谢您的回复,但我的目的是在文本超过行长度时换行而不是加入水平滚动条。 - Sameer

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