如何在Android中的textview中换行


86

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

我已经搜索并尝试了以下操作:

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

但是没有办法。

谁能建议我该怎么做。


7
默认情况下,TextViews应该自动换行。您可以发布整个布局吗?
danh32'1

表格视图内部是否有Textview?如果是这样,我有一个答案。
JohnFx 2011年

1
就我而言,在添加了大约六个属性(如下所述)以强制textview将文本换行到多行之后,但没有成功,我注意到我有一个attribute android:inputType="textPersonName"。显然,它是由Android Studio设计工具添加的。删除该属性可解决问题!可能还有其他输入类型也阻止换行。
LarsH

Answers:


55

对我来说,此问题仅发生在Android <4.0上

我使用的参数组合为:

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

maxLines计数似乎是使TextView换行的随机最终部分。


9
我现在知道它是一个旧线程,但是认为我会发表我的发现。我只使用了“ android:maxLines”,然后包裹了我的文本。干杯@Guykun
StuStirling '10 -10-10

同样,这等同于将TextView的高度简单地设置为match_parent,这与使TextView的高度扩展为包括多余的行不同。
SMBiggs '16

50

约束布局

<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 width允许左右约束确定小部件的宽度。

设置左右约束可设置窗口小部件的实际宽度,文本将在其中自动换行。

约束布局文档


是! 这就是它的工作原理!只要确保将宽度设置为0dp
Yoraco Gonzales

设置左右约束有助于使它自动换行,而不是使文本溢出超出右边界
贾谢

31

对于其中的情况下TextView是内侧的TableLayout,该解决方案是设置android:shrinkColumns="1"TableLayout。(用1要包装的TextView所在的列号替换。(0索引))

AFAICT,不需要其他属性TextView

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

FWIW,我最初是将其与

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

但这在对话框的底部导致了所有多余的空白。


这就是我想要的!否则,我的话就会被打断
卡森·霍尔兹海默

12

您必须使用2个参数:

  • android:ellipsize="none" :文本不会在textview宽度上剪切

  • android:scrollHorizontally="false" 文本根据需要自动换行


5
那对我不起作用。(FWIW,我在TableLayout的TableRow中有一个TextView。)
aij 2014年

8

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

它具有三个常数值

  • 均衡
  • 高质量
  • 简单

在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 Break策略图片


7

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


这只会导致TextView展开以占用尽可能多的空间,这与将Height设置为相同match_parent。与OP所希望的不太一样。
SMBiggs '16

1
对于TableLayout,请layout_weight="1"为我解决此问题。但是,我的包含TextView的TableRow已layout_height设置为特定值。可能对某人有用
试剂盒

5

好的,事实真相是中间的,因为您必须从父母和孩子的角度看问题。以下解决方案仅在微调器模式=dialog而不考虑Android版本时才有效(那里没有问题..在VD和DesireS中使用Android => 2.2进行了测试):

  1. 将您的微调器(父母)模式设置为:

    android:spinnerMode="dialog"  
    
  2. 将textview的(子级自定义视图)属性设置为:

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

我希望这也对您有用。


尝试了很多方法以使其在“下拉”模式下工作,但没有任何效果。现在确定为“对话”模式。
Mangesh

4

通过将设置android:maxEms为给定值,android:layout_weight="1"将使TextView在达到ems的给定长度时自动换行。


也适用于放置在RelativeLayout中的TextView。
ayz4sci

已经搜索了几个小时,也感谢它在constraintLayout上也很有效
TarekB

3

在Android Studio 2.2.3中,该inputType属性下有个名为的属性textMultiLine。选择此选项为我解决了类似的问题。希望对您有所帮助。


2
这是针对EditText,而不是Textview
PsychedelicSubstance

2

只是在RecyclerView内的布局内处理TextView。我的文字被截断,例如Read this message,我看到了:Read this。我尝试android:maxLines="2"在TextView上进行设置,但没有任何更改。但是,android:lines="2"结果出现Read this在第一行和message第二行。


1

我有同样的问题。进行更改后,它可以正常工作-

android:layout_width="wrap_content"

省略号,maxLines或layout_weight-都没有任何区别。注意-父宽度也设置为wrap_content。


1

您所要做的就是设置textview的宽度

android:layout_width =“ 60dp”

您可以根据需要更改宽度。只需输入长句以检查其是否像这样工作

android:text =“我想成为世界一流的软件工程师”


1

尝试@Guykun的方法

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

另外,请确保未将父级宽度设置为包装内容。这就是我所缺少的。


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级别9)中运行它时,它将自动跨3行换行。


注意此代码的使用LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);。最有可能是您认为包裹是“自动的”包裹
nemesisfixx 2012年

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"

触发包装选项的唯一一件事是专用宽度


-1

您需要使用以下内容在ScrollView中添加TextView:

<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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.