【问题标题】:How to wrap text in textview in Android如何在Android的textview中换行
【发布时间】:2011-06-18 14:37:49
【问题描述】:

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

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

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

但没有任何工作..

谁能建议我该怎么做。

【问题讨论】:

  • TextViews 默认应该自动换行。你能发布你的整个布局吗?
  • Textview 有没有可能在表格布局中?如果是这样,我有一个答案给你。
  • 在我的情况下,在添加大约六个属性(如下所述)以强制 textview 将文本换行多行后,没有成功,我注意到我有一个属性 android:inputType="textPersonName"。显然它是由 Android Studio 设计工具添加的。删除该属性解决了问题!可能还有其他输入类型也阻止了换行。

标签: android textview word-wrap


【解决方案1】:

约束布局

<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

【讨论】:

  • 是的!这正是它的工作原理!只需确保将宽度设置为 0dp
  • 设置左右约束有助于让它为我换行,而不是文本溢出超出右边界
【解决方案2】:

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

我使用的参数组合是:

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

maxLines 计数似乎是使我的 TextView 换行的随机最后一块。

【讨论】:

  • 我现在知道这是一个旧线程,但我想我会发布我的发现。我只使用了 'android:maxLines' 然后它包装了我的文本。欢呼@Guykun
  • 再一次,这无异于简单地将TextView的高度设置为match_parent,这与将TextView的高度扩展为包含额外的行是不一样的。
【解决方案3】:

对于TextViewTableLayout 内的情况,解决方案是在TableLayout 上设置android:shrinkColumns="1"。 (将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"

但这导致对话框底部有一些额外的空白空间。

【讨论】:

  • 这就是我要找的!否则我的话就断了
  • stretchColumns 在桌子上也对我有用,实际上给了我更好的结果
【解决方案4】:

AppCompatTextView 中使用app:breakStrategy="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

【讨论】:

    【解决方案5】:

    您必须使用 2 个参数:

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

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

    【讨论】:

    • 这对我不起作用。 (FWIW,我在 TableLayout 的 TableRow 中有一个 TextView。)
    【解决方案6】:

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

    【讨论】:

    • 这只是让 TextView 展开以占用尽可能多的空间,这与将 Height 设置为 match_parent 相同。与 OP 想要的不太一样。
    • 对于 TableLayout,layout_weight="1" 为我解决了这个问题。但是,包含 TextView 的 TableRow 将 layout_height 设置为特定值。也许对某人有用
    【解决方案7】:

    好吧,伙计们,事实在中间,因为您必须从父母和孩子的角度看待问题。以下解决方案仅在微调模式 = 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"
      

    我希望这也适用于你。

    【讨论】:

    • 尝试了很多方法让它在“下拉”模式下工作,但没有任何效果。现在选择“对话”模式。
    【解决方案8】:

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

    【讨论】:

    • 也适用于放置在 RelativeLayout 中的 TextView。
    • 已经搜索了几个小时,感谢它在约束布局上也很有效
    【解决方案9】:

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

    【讨论】:

    • 这是用于 EditText,而不是 Textview
    【解决方案10】:

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

    【讨论】:

      【解决方案11】:

      试试@Guykun 的方法

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

      此外,请确保未将父宽度设置为换行内容。这是我缺少的东西。

      【讨论】:

        【解决方案12】:

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

        android:layout_width="wrap_content"
        

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

        【讨论】:

          【解决方案13】:

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

          android:layout_width="60dp"

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

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

          【讨论】:

            【解决方案14】:

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

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

            android:layout_marginRight="52dp"
            

            【讨论】:

              【解决方案15】:

              够奇怪的——我用代码创建了我的 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);。您认为包装很可能是“自动”的
              【解决方案16】:

              只需将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"/>
              

              【讨论】:

                【解决方案17】:

                诀窍在于 textView 的宽度,尝试将其设为专用数字,例如:

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

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

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

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

                【讨论】:

                  【解决方案18】:

                  您需要在 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>
                  

                  【讨论】:

                  • 谢谢您的回复但是我的目的是当文本超过行长时换行而不是放置水平滚动条。
                  猜你喜欢
                  • 1970-01-01
                  • 2011-02-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多