Android中的多行TextView?


154

我在下面喜欢 xml

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
    </TextView> 
</TableRow>

它不适用于multiline,而我正在使用TableLayout...

那我在这里做什么错?

Answers:


197

如果您输入的文字很TextView短,它将不会自动扩展为四行。如果你想TextView总是有四行不管它的文本的长度,设置的android:lines属性:

<TextView
    android:id="@+id/address1"
    android:gravity="left"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:maxLines="4"
    android:lines="4"
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

您可以使用TableRow进行此操作,请参见以下代码

<TableRow >
        <TextView
            android:id="@+id/tv_description_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:padding="8dp"
            android:text="@string/rating_review"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:maxLines="4"`enter code here`
            android:padding="8dp"
            android:text="The food test was very good."
            android:textColor="@color/black"
            android:textColorHint="@color/hint_text_color" />
    </TableRow>

21
OP 并没有 “希望TextView总是具有四行,而不管其中的文本长度如何”。
焦油

7
这个答案对我有用。但是我得到了最好的结果,不是使用maxlines和line,而是使用maxlines和minlines,并且不使用line。我将minlines设置为1,并将maxlines设置为大于最大数据。这样一来,我可以获得1到N行数据的紧凑视图。
R Earle Harris

1
@REarleHarris:我也尝试过相同的解决方案,但问题是它不考虑maxLines计数。所有数据均以minLines计数显示。我现在可以尝试什么,我在xml中使用自定义textview
Sagar Devanga

118

我以为我会补充一点,如果您使用:

android:inputType="textMultiLine"

然后,视图不再可单击。我试图在幻灯片菜单中获取多行textview,这显然需要响应单击。

虽然android:singleLine="false"工作正常。


3
这并非完全正确,因为Android自身的皮棉错误提示您仅将此属性与EditText一起使用,而不与TextView一起使用。
贾里德(Jared)

1
您是指textMultiline吗?我说不要使用。singleLine适用于TextViews:developer.android.com/reference/android/widget/…–
Ryan

3
android:singleLine现在已弃用
HumbertoCastañeda'16

你确定吗?尽管我只是看到它在res文档中被标记为它,但在上面的注释中链接到的文档中并没有提及。奇怪的是,他们在TextView页面上没有提到这一点。问题是,当我放入OP时,他们建议的解决方法(多行)会使视图无法单击。developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android:singleLine =“ false”已被弃用,因为它是默认值
Ashraf Alshahawy

28

我都不喜欢这两个答案。只需设置inputType,TextView将适应其内容

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

在Nexus One(2.3)和Nexus 4(4.4)上进行了测试


52
android:inputType =“ textMultiLine”不适用于TextView,其适用于EditText,如果尝试执行此操作,则会收到警告
bhaskarc 2014年

2
您应该听警告。使用@Ryans解决方案。
m02ph3u5 '16

15

只需将'\ n'放在您的文本中...不需要额外的属性:)

          <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Pigeon\nControl\nServices"
            android:id="@+id/textView5"
            android:layout_gravity="center"
            android:paddingLeft="12dp"/> 

6
此解决方案不能用于动态设置文本
Sagar Devanga 2015年

@SagarDevanga动态设置文本是什么意思?
2016年

3
@SagarDevanga,我刚刚检查过,动态和静态文本默认情况下是多行的(如果使用\n),所以这是一个正确的解决方案。不singleLine=false,不lines=4,依此类推。
CoolMind

10

只需在ScrollView中添加textview

<ScrollView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:layout_marginLeft="15dp"
           android:layout_marginRight="15dp"
           android:layout_marginTop="20dp"
           android:fillViewport="true">

           <TextView
               android:id="@+id/txtquestion"
               android:layout_width="fill_parent"
               android:layout_height="match_parent"
               android:background="@drawable/abs__dialog_full_holo_light"
               android:lines="20"
               android:scrollHorizontally="false"
               android:scrollbars="vertical"
               android:textSize="15sp" />

       </ScrollView>


5

尝试通过使EditText不可单击和无法聚焦来使用它,也可以显示滚动条并删除EditText的下划线。
这是一个例子:

<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine"                   <!-- multiline -->
android:clickable="false"                         <!-- unclickable -->
android:focusable="false"                         <!-- unfocusable -->
android:scrollbars="vertical"     <!-- enable scrolling vertically -->
android:background="@android:color/transparent"   <!-- hide the underbar of EditText -->
/>  

希望这可以帮助 :)


3

首先将"\n"其替换为Html等效值,"&lt;br&gt;" 然后调用Html.fromHtml()字符串。请按照以下步骤操作:

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))

这很完美。


2

我了解到的是在希望制动到下一行的单词之间添加“ \ n”。例如...

<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:text="M-F 9am-5pm \n By Appointment Only" />

下午5点至结束之间的\ n使我可以更好地控制我希望下一行开始和结束的位置。


2

我发现多行TextView的最佳答案是:

android:inputType="textMultiLine"

8
是不是android:inputType一个属性<EditText>不为<TextView>
timtim

如果将此属性添加到TextView,则会出现警告。-属性android:inputType =“ textMultiLine”不应与<TextView>一起使用。实际上,此属性用于EditText。
Yhondri '19

2

您可以使用android:inputType =“ textMultiLine”

  <TextView android:id="@+id/address1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:gravity="left"
    android:maxLines="4" 
    android:inputType="textMultiLine"
    android:text="Johar Mor, Gulistan-e-Johar, Karachi" />

1
这显示为警告。不打算用于TextView
Stealth Rabbi's

1
inputType仅支持EditText组件。
Chamin Wickramarathna


0
You can do this with TableRow, see below code

<TableRow >
    <TextView
        android:id="@+id/tv_description_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:padding="8dp"
        android:text="@string/rating_review"
        android:textColor="@color/black"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4"`enter code here`
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>

0

最简单的方法

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor,\n Gulistan-e-Johar,\n Karachi" >
    </TextView> 
</TableRow>

使用\n您想要插入新行的位置,希望对您有所帮助


0

关键是结合使用的Textview singleline=false(不赞成使用,但必须使用)linesmaxlinesminlines

<TextView
                android:id="@+id/txtBowlers"
                style="@style/Default_TextBox.Small"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:singleLine="false"
                android:maxLines="6"
                android:text="Bob\nSally\nJohn"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="@+id/txtTeamName"
                app:layout_constraintTop_toBottomOf="@+id/txtTeamName"/>

-1

为什么不声明字符串而不是在布局文件中写长行。为此,您必须在布局文件'android:text =“ @ string / text”'中声明一行代码,然后转到\\ app \ src \ main \ res \ values \ strings.xml并添加一行代码'您的多行文字在这里'也请使用'\ n'从任何点断开该行,否则该行将自动进行调整。


-4

对我来说,所有解决方案都行不通。我知道这不是此问题的完整答案,但有时可以提供帮助。

我将4个textview放置在垂直的linearlayout中。

<Linearlayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation:"vertical"

    ...>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line1"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line2"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line3"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line4"
       .../>
</LinearLayout>

对于文本视图文本为常量(例如标签)的情况,此解决方案很有用。


1
请不要这样做。
humble_wolf

-23

当TextView没有足够的空间以适合单行且singLine未设置为true时,它将为多行。

如果它在一行中获得空格,它将不会是多行。


7
如果我想使用fill_parent而不是固定宽度怎么办?如果我这样做的话,我的内容就会删减...
happyhardik 2012年

6
我会尝试android:singleLine="false"android:inputType="textMultiLine"(如Marageus所述)。android:inputType="textMultiLine"当两者同时存在时,请注意优先事项
Romantic Electron

与其他发表评论的人分享看法,这是完全错误的,对于为什么这是公认的答案,我感到mb目结舌。
Aleks G 2015年
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.