2011-01-31 109 views
53

是否有人知道如何在Android平台的TextView中包装文本。即如果textview中的文本超过了屏幕长度,它应该显示在第二行。如何在android中的textview中包装文本

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

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

但没有工作..

任何人都可以建议我怎么能做到这一点.. 我是比较新的Android平台..

+3

默认情况下,TextView应该自动换行。你可以发布你的整个布局? – danh32 2011-01-31 16:28:29

+0

任何机会是表格布局中的Textview?如果有的话,我为你解答。 – JohnFx 2011-02-22 00:55:13

回答

0

你需要在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 2011-02-01 02:25:33

9

您必须使用2个参数:

  • android:ellipsize="none":文本不削减TextView的宽度

  • android:scrollHorizontally="false"文字环绕在必要时

+3

这不适合我。 (FWIW,我在TableLayout的TableRow中有一个TextView。) – aij 2014-06-08 01:19:24

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行。

+0

请注意此代码的使用`LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);`。最有可能的是,你认为包装是“automagic” – nemesisfixx 2012-01-13 21:18:04

5

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

+0

这只是导致TextView扩展到尽可能多的空间,这与将Height设置为`match_parent`相同。与OP想要的不太一样。 – 2016-11-11 16:47:10

+0

在TableLayout的情况下,`layout_weight =“1”`为我解决了这个问题。但是,包含TextView的TableRow将`layout_height`设置为特定的值。也许会对某人有用 – kit 2017-08-29 19:02:07

43

对我来说,这个问题只发生在Android 4.0 <

的我所使用的参数组合为:

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

的MAXLINES计数似乎是做了我的TextView包随机最后一块。

+7

我现在知道它的一个旧线程,但认为我会张贴我的发现。我只用了'android:maxLines',然后它包裹了我的文本。 Cheer @Guykun – StuStirling 2012-10-10 16:02:48

+0

同样,这等于简单地将TextView的高度设置为“match_parent”,这与使TextView的高度展开以包含额外行不同。 – 2016-11-11 16:52:09

5

好吧,家伙事实是在中间的某个地方,你必须从父母的观点和孩子的角度看问题。下面的解决方案仅当微调模式= dialog不管Android版本(那里没有问题..在VD测试了它和欲望与Android => 2.2):

  1. 设置你微调的(父)模式,如:

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

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

我希望这也适用于你。

+0

尝试了很多事情,使其在'下拉'模式下工作,但没有任何工作。现在安置在'对话'模式。 – Mangesh 2015-08-09 15:31:22

1

通过将android:maxEms设置为给定值以及android:layout_weight="1"将导致TextView在达到ems的给定长度时进行换行。

0

我使用的是Android 2.2,如果超过屏幕,我的textview将自动转到下一行。

如果您希望在屏幕结束之前将文本转到下一行,只需添加(只需输入您自己的dp值)即可。如果您在文本右侧有图片,这将很有用。

android:layout_marginRight="52dp" 
24

对于其中TextViewTableLayout内的情况下,溶液是设置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" 

但导致在该对话框的底部,一些额外的空白空间是所有英寸

+0

这就是我一直在寻找的!否则我的话被切断了 – 2017-08-31 08:36:32

-1

我知道它的晚,但它可能有助于其他人。只需设置宽度为0dp

<TextView 
     android:layout_width="0dp" 
     .../> 
+1

这必须是一个笑话,对吧? – 2016-11-11 16:49:33

0

尝试@ Guykun的方法并确保父宽度未设置为包装内容。这是我错过的东西。

-1

其实很简单。只需编写: +“\ n”无论你想要一个wordwrap

2

在Android Studio 2.2.3的inputType属性下有一个名为textMultiLine的属性。选择这个选项为我解决了一个类似的问题。我希望有所帮助。

0

我有同样的问题。以下更改使其工作 -

android:layout_width="wrap_content" 

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

8

约束布局

<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宽度是一个好主意允许左/右约束,以确定你的widget有多宽。

设置左/右约束设置您的小部件的实际宽度,文本将在其中进行包裹。

Constraint Layout docs

0

刚在RecyclerView内部布局内一个TextView工作。我有文字被切断,例如,Read this message,我看到:Read this。我尝试在TextView上设置android:maxLines="2",但没有任何更改。但是,android:lines="2"在第一行产生了Read this,在第二行产生了message