如何在Android中的textview中包装文本

时间:2011-01-31 13:56:27

标签: android textview word-wrap

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

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

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

但没有工作......

任何人都可以建议我该怎么做。

21 个答案:

答案 0 :(得分:46)

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

我使用的参数组合是:

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

maxLines计数似乎是使我的TextView换行的随机最终作品。

答案 1 :(得分:29)

对于TextView位于TableLayout内的情况,解决方法是在android:shrinkColumns="1"上设置TableLayout。 (将1替换为要包装的TextView所在的列号。(0-indexed))

AFAICT,TextView上不需要其他属性。

对于其他情况,请在此处查看其他答案。

FWIW,我最初是用

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

但这导致Dialog底部有一些额外的空白区域。它全部在。

答案 2 :(得分:22)

约束布局

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

设置左/右约束设置窗口小部件的实际宽度,文本将在其中包装。

Constraint Layout docs

答案 3 :(得分:10)

您必须使用2个参数:

  • android:ellipsize="none":文字未在文字视图宽度上剪切

  • android:scrollHorizontally="false"文本根据需要包含多行

答案 4 :(得分:6)

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

答案 5 :(得分:5)

好的伙计,事实是在中间的某个地方,因为你必须从父母的观点和孩子的角度看问题。以下解决方案仅适用于微调器模式= dialog,无论Android版本如何(没有问题......在VD和DesireS中使用Android =&gt; 2.2进行测试):

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

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

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    
  3. 我希望这也适合你。

答案 6 :(得分:3)

android:maxEmsandroid:layout_weight="1"一起设置为给定值会导致TextView在达到给定的ems长度后换行。

答案 7 :(得分:3)

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

答案 8 :(得分:2)

正在处理RecyclerView内部布局中的TextView。我看到文字被切断了,对于------------------------------------ id description value ---- -------------------- ---------- 1 description string 10000.41 2 description string 9999.68 3 description string 10000.64 ------------------------------------ ,我看到了:Read this message。我尝试在TextView上设置Read this,但没有任何改变。但是,android:maxLines="2"在第一行产生了android:lines="2",在第二行产生了Read this

答案 9 :(得分:1)

我遇到了同样的问题。以下更改使其有效 -

var am = parseInt(res.Items[0].dueAmount)

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

答案 10 :(得分:1)

  

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 breakStrategy image

答案 11 :(得分:1)

您可以对TextView使用支持库的自动调整大小,在类似的线程上检查my answer

答案 12 :(得分:0)

简单的方法:

android:layout_width="match_parent"
android:layout_height="wrap_content"

默认情况下会自动换行

答案 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>

答案 14 :(得分:0)

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

android:layout_width =“ 60dp”

您可以更改宽度来选择。只需输入长句子以检查其是否可以正常工作

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

答案 15 :(得分: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"/>

答案 16 :(得分:0)

技巧是使用textView宽度,尝试使其成为专用数字,例如:

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

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

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

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

答案 17 :(得分:0)

尝试@ Guykun的方法并确保父级宽度未设置为包装内容。这是我失踪的事情。

答案 18 :(得分:0)

我正在使用Android 2.2,如果超出屏幕,我的textview会自动转到下一行。

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

android:layout_marginRight="52dp"

答案 19 :(得分:0)

奇怪 - 我在Code中创建了我的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);

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

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

答案 20 :(得分:-6)

它实际上很容易。写吧 : +“\ n”只要你想要一个wordwrap