TextView đa dòng trong Android?


154

Tôi đã làm như dưới đây trong 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>

Nó không hoạt động multilinevà tôi đang sử dụng TableLayout...

vậy tôi đang làm gì ở đây?

Câu trả lời:


197

Nếu văn bản bạn đang đặt TextViewlà ngắn, nó sẽ không tự động mở rộng thành bốn dòng. Nếu bạn muốn TextViewđể luôn có bốn dòng không phụ thuộc vào chiều dài của văn bản trong đó, thiết lập các android:linesthuộc tính:

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

Bạn có thể làm điều này với TableRow, xem mã bên dưới

<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 không "muốn TextView luôn có bốn dòng bất kể độ dài của văn bản trong đó".
tar

7
Câu trả lời này đã làm việc cho tôi. Nhưng tôi đã nhận được kết quả tốt nhất, không phải với dòng tối đa và dòng, mà với dòng tối đa và dòng nhỏ và không sử dụng dòng. Tôi đặt minlines thành 1 và maxlines lớn hơn dữ liệu lớn nhất. Bằng cách đó, tôi nhận được 1 đến N dòng để xem dữ liệu nhỏ gọn.
R Earle Harris

1
@REarleHarris: Tôi cũng đã thử giải pháp tương tự nhưng vấn đề là nó không lấy số lượng maxLines. Tất cả dữ liệu được hiển thị trong số lượng minLines. Tôi có thể thử gì bây giờ Tôi đang sử dụng textview tùy chỉnh trong xml
Sagar Devanga

119

Tôi chỉ nghĩ rằng tôi sẽ thêm nó nếu bạn sử dụng:

android:inputType="textMultiLine"

Sau đó, xem dừng lại có thể nhấp. Tôi đã cố gắng để có được các bản xem xét nhiều dòng trong menu ngăn kéo của mình mà rõ ràng cần phải đáp ứng với các nhấp chuột.

Các android:singleLine="false"công việc tốt mặc dù.


3
Điều này không chính xác vì các lỗi lint của Android cho thấy rằng bạn chỉ sử dụng thuộc tính này với EditText chứ không phải TextView.
Jared

1
Bạn đang đề cập đến textMultiline? Tôi nói không sử dụng nó. singleLine vẫn ổn trên TextViews: developer.android.com/reference/android/widget/
Ryan

3
android: singleLine hiện không được chấp nhận
Humberto Castañeda

Bạn có chắc không? Nó không đề cập rằng trong các tài liệu tôi liên kết đến trong nhận xét trên, mặc dù tôi chỉ thấy nó được đánh dấu như vậy trong các tài liệu res. Lạ là họ không đề cập đến điều đó trên trang TextView. Vấn đề là cách giải quyết mà họ đề xuất (multiline) khiến chế độ xem có thể nhấp được khi tôi đặt vào OP của mình. developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" không được dùng vì giá trị mặc định
Ashraf Alshahawy

28

Tôi không thích câu trả lời nào cả. Chỉ cần đặt InputType và TextView sẽ thích ứng với nội dung của nó

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

Đã thử nghiệm trên Nexus One (2.3) và Nexus 4 (4.4)


52
android: inputType = "textMultiLine" không dành cho TextView, nó dành cho EditText và bạn sẽ nhận được cảnh báo nếu bạn thử làm điều này
bhaskarc

2
Bạn nên lắng nghe những cảnh báo. Sử dụng giải pháp @Ryans.
m02ph3u5

15

Chỉ cần đặt '\ n' bên trong văn bản của bạn ... không yêu cầu thêm thuộc tính :)

          <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
giải pháp này không thể được sử dụng để cài đặt văn bản một cách linh hoạt
Sagar Devanga

@SagarDevanga Đặt văn bản động có nghĩa là gì?
juil

3
@SagarDevanga, tôi vừa kiểm tra, một văn bản động và tĩnh được đa mặc định (nếu sử dụng \n), vì vậy đó là một giải pháp đúng. Không singleLine=false, không lines=4và như vậy.
CoolMind

10

Chỉ cần thêm textview trong ScrollView

<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

Tôi không thích giải pháp buộc số lượng dòng trong chế độ xem văn bản. Tôi thay vì đề nghị bạn giải quyết nó thông qua các giải pháp được đề xuất ở đây . Như tôi thấy, OP cũng đang vật lộn với việc làm cho chế độ xem văn bản trông giống như trong bảng và shrinkColumnslà chỉ thị chính xác để truyền vào để đạt được những gì mong muốn.


5

Cố gắng làm việc với EditText bằng cách làm cho nó không thể nhìn thấy và không thể lấy nét, bạn cũng có thể hiển thị một thanh cuộn và xóa thanh bên dưới của EditText.
Đây là một ví dụ:

<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 -->
/>  

Hi vọng điêu nay co ich :)


3

Đầu tiên thay thế "\n"bằng Htmltương đương của nó "&lt;br&gt;" sau đó gọi Html.fromHtml()vào chuỗi. Thực hiện theo các bước dưới đây:

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

Điều này hoạt động hoàn hảo.


2

Những gì tôi học được là thêm "\ n" vào giữa các từ mà bạn muốn nó chuyển sang dòng tiếp theo. Ví dụ...

<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" />

\ N trong khoảng thời gian từ 5 giờ chiều đến Bởi cho phép tôi kiểm soát nhiều hơn nơi tôi muốn dòng tiếp theo của mình bắt đầu và kết thúc.


2

Câu trả lời tốt nhất tôi tìm thấy cho TextView đa dòng là:

android:inputType="textMultiLine"

8
Không phải là android:inputTypemột thuộc tính cho <EditText>không <TextView>?
timtim

Một cảnh báo xuất hiện nếu bạn thêm thuộc tính này vào TextView. - Không được sử dụng android: inputType = "textMultiLine" với <TextView>. Trên thực tế thuộc tính này là dành cho EditText.
Yhondri

2

bạn có thể sử dụng 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
Điều này được hiển thị như một cảnh báo. Không có nghĩa là được sử dụng cho TextView
Rabbi tàng hình

1
inputType chỉ hỗ trợ cho các thành phần EditText.
Chamin Wickramarathna

1

Tôi đã sử dụng:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);

nó làm việc cho tôi 1 là số cột.


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

Cách đơn giản nhất

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

Sử dụng \nnơi bạn muốn chèn một dòng mới Hy vọng nó sẽ giúp bạn


0

Chìa khóa là một Textview với singleline=false(cái có bị phản đối, nhưng là phải có để làm việc) kết hợp với lines, maxlineshoặcminlines

<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

Tại sao bạn không khai báo một chuỗi thay vì viết một dòng dài vào tệp bố cục. Để làm điều này, bạn phải khai báo một dòng mã vào tệp bố cục 'android: text = "@ string / text"' và đi tới \ app \ src \ main \ res \ value \ String.xml và thêm một dòng mã 'Văn bản nhiều dòng của bạn ở đây' Cũng sử dụng '\ n' để ngắt dòng từ bất kỳ điểm nào khác, dòng sẽ tự động được điều chỉnh.


-4

Đối với tôi không phải là giải pháp không hoạt động. Tôi biết nó không phải là một câu trả lời hoàn chỉnh cho câu hỏi này, nhưng đôi khi nó có thể giúp ích.

Tôi đặt 4 bài phỏng vấn trong một linearlayout dọc.

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

Giải pháp này tốt cho các trường hợp văn bản xem văn bản không đổi, như nhãn.


1
Xin đừng làm điều này.
humble_wolf

-23

TextView sẽ là nhiều dòng khi nó không có đủ không gian để vừa trong một dòng và singLine không được đặt thành true.

Nếu nó có không gian trong một dòng thì nó sẽ không phải là nhiều dòng.


7
Nếu tôi muốn sử dụng fill_parent thay vì chiều rộng cố định thì sao? Nội dung của tôi bị cắt, nếu tôi làm như vậy ...
happyhardik

6
Tôi sẽ thử android:singleLine="false"hoặc android:inputType="textMultiLine"(như được mô tả bởi Marageus). Chú ý android:inputType="textMultiLine"được ưu tiên khi cả hai có mặt
Electron lãng mạn

Chia sẻ quan điểm của những người khác đã bình luận, điều này hoàn toàn sai và tôi chết lặng về lý do tại sao đây là câu trả lời được chấp nhận.
Aleks G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.