Multiline TextView ใน Android?


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

แล้วฉันมาทำอะไรผิดนี่

คำตอบ:


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 มีสี่บรรทัดเสมอโดยไม่คำนึงถึงความยาวของข้อความในนั้น"
tar

7
คำตอบนี้ใช้ได้สำหรับฉัน แต่ฉันได้ผลลัพธ์ที่ดีที่สุดไม่ใช่กับ maxlines และ lines แต่กับ maxlines และ minline และไม่ได้ใช้ lines ฉันตั้งค่า minlines เป็น 1 และ maxline ที่ใหญ่กว่าข้อมูลที่ใหญ่ที่สุด ด้วยวิธีนี้ฉันจะได้ 1 ถึง N บรรทัดสำหรับมุมมองที่กะทัดรัดของข้อมูล
R Earle Harris

1
@REarleHarris: ฉันได้ลองวิธีเดียวกัน แต่ปัญหาคือมันไม่นับ maxLines ข้อมูลทั้งหมดจะแสดงเป็นจำนวน minLines ฉันสามารถลองอะไรได้บ้างตอนนี้ฉันใช้มุมมองข้อความที่กำหนดเองใน xml
Sagar Devanga

119

ฉันแค่คิดว่าฉันจะเพิ่มว่าถ้าคุณใช้:

android:inputType="textMultiLine"

จากนั้นมุมมองจะหยุดคลิกได้ ฉันพยายามรับ textviews หลายบรรทัดในเมนูสไลด์ลิ้นชักซึ่งต้องตอบสนองต่อการคลิกอย่างชัดเจน

android:singleLine="false"ทำงานได้ดีแม้ว่า


3
สิ่งนี้ไม่ถูกต้องอย่างแม่นยำเนื่องจากข้อผิดพลาดของผ้าสำลีของ Android แนะนำให้คุณใช้คุณลักษณะนี้กับ EditText เท่านั้นไม่ใช่ TextView
Jared

1
คุณหมายถึงข้อความ MultiLine? ฉันบอกว่าจะไม่ใช้มัน singleLine ใช้ได้ดีกับ TextViews: developer.android.com/reference/android/widget/…
Ryan

3
android: เลิกใช้งานไลน์เดียวตอนนี้
Humberto Castañeda

คุณแน่ใจไหม? ไม่ได้พูดถึงว่าในเอกสารที่ฉันลิงก์ไปถึงในความคิดเห็นด้านบนถึงแม้ว่าฉันเพิ่งเห็นว่ามันถูกทำเครื่องหมายเป็นเช่นนั้นในเอกสารความละเอียด แปลกที่พวกเขาไม่พูดถึงสิ่งนั้นในหน้า TextView ปัญหาคือการแก้ไขปัญหาที่พวกเขาแนะนำ (หลายบรรทัด) หยุดมุมมองที่สามารถคลิกได้เมื่อฉันใส่ OP ของฉัน developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" เลิกใช้แล้วเนื่องจากเป็นค่าเริ่มต้น
Ashraf Alshahawy

28

ฉันไม่ชอบคำตอบ เพียงตั้งค่าประเภทอินพุตและ TextView จะปรับให้เข้ากับเนื้อหา

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

ทดสอบกับ Nexus One (2.3) และ Nexus 4 (4.4)


52
หุ่นยนต์: inputType = "textMultiLine" ไม่ได้สำหรับ TextView, สำหรับ EditText และคุณได้รับการเตือนถ้าคุณลองทำเช่นนี้
bhaskarc

2
คุณควรฟังคำเตือน ใช้โซลูชัน @Ryans
m02ph3u5

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

@SagarDevanga การตั้งค่าข้อความแบบไดนามิกหมายถึงอะไร
juil

3
@SagarDevanga ฉันเพิ่งตรวจสอบข้อความแบบไดนามิกและแบบคงที่จะ multilined โดยค่าเริ่มต้น (ถ้าใช้\n) จึงเป็นทางออกที่เหมาะสม ไม่singleLine=falseไม่lines=4
CoolMind

10

เพียงเพิ่มมุมมองข้อความใน 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

ฉันไม่ชอบวิธีแก้ปัญหาที่บังคับให้จำนวนบรรทัดในมุมมองข้อความ ผมค่อนข้างขอแนะนำให้คุณแก้ปัญหาได้ผ่านวิธีการที่นำเสนอที่นี่ ในขณะที่ฉันเห็น OP กำลังดิ้นรนกับการทำให้มุมมองข้อความดูเหมือนเหมาะสมในตารางและshrinkColumnsเป็นคำสั่งที่ถูกต้องเพื่อส่งผ่านเพื่อให้บรรลุสิ่งที่ต้องการ


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"ด้วยHtmlequavalent ของมัน"&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" />

\ n ระหว่าง 5 โมงเย็นถึงเที่ยงและโดยอนุญาตให้ฉันควบคุมได้มากขึ้นว่าฉันต้องการให้บรรทัดถัดไปของฉันเริ่มต้นและสิ้นสุด


2

คำตอบที่ดีที่สุดที่ฉันพบสำหรับหลาย TextView คือ:

android:inputType="textMultiLine"

8
ไม่ใช่android:inputTypeแอตทริบิวต์สำหรับ<EditText>ไม่ใช่<TextView>หรือ
timtim

คำเตือนจะปรากฏขึ้นหากคุณเพิ่มแอททริบิวนี้ใน TextView - แอนดรอยด์ที่ประกอบขึ้น: inputType = "textMultiLine" ไม่ควรใช้กับ <TextView> ที่จริงแล้วแอ็ตทริบิวต์นี้มีไว้สำหรับ EditText
Yhondri

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

1
inputType รองรับเฉพาะคอมโพเนนต์ EditText
Chamin Wickramarathna

1

ฉันใช้:

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

มันใช้งานได้สำหรับฉัน 1 คือจำนวนคอลัมน์


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(ซึ่งใช่จะเลิก แต่จะต้องมีการทำงาน) ร่วมกับlines, maxlinesหรือminlines

<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 รายการในแนวตั้ง

<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 ไม่ได้ตั้งค่าเป็นจริง

หากได้รับพื้นที่ในหนึ่งบรรทัดจะไม่เป็นหลายบรรทัด


7
ถ้าฉันต้องการใช้ fill_parent แทนที่จะเป็นความกว้างคงที่ เนื้อหาของฉันคือตัดถ้าผมทำเช่นนั้น ...
happyhardik

6
ฉันจะลองandroid:singleLine="false"หรือandroid:inputType="textMultiLine"(ตามที่อธิบายโดย Marageus) ประกาศที่android:inputType="textMultiLine"มีความสำคัญเมื่อทั้งคู่อยู่
อิเล็กตรอนแสนโรแมนติก

การแบ่งปันมุมมองของผู้อื่นที่แสดงความคิดเห็นนี้เป็นสิ่งที่ผิดอย่างสมบูรณ์และฉันรู้สึกตะลึงว่าทำไมนี่คือคำตอบที่ได้รับการยอมรับ
Aleks G
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.