Multiline TextView di Android?

154

Saya suka di bawah ini 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>

Ini tidak berfungsi multiline, dan saya menggunakanTableLayout ...

jadi apa kesalahan yang saya lakukan di sini?

Chatar Veer Suthar
sumber

Jawaban:

197

Jika teks yang Anda masukkan TextViewpendek, itu tidak akan secara otomatis diperluas menjadi empat baris. Jika Anda ingin TextViewagar selalu memiliki empat baris terlepas dari panjang teks di dalamnya, atur android:linesatributnya:

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

Anda dapat melakukan ini dengan TableRow, lihat kode di bawah ini

<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>
Zarah
sumber
21
OP tidak "ingin TextView selalu memiliki empat baris terlepas dari panjang teks di dalamnya".
tar
7
Jawaban ini berhasil untuk saya. Tetapi saya mendapatkan hasil terbaik, bukan dengan garis batas dan garis, tetapi dengan garis batas dan garis dan tidak menggunakan garis. Saya menetapkan minlines ke 1 dan maxlines lebih besar dari data terbesar. Dengan begitu saya mendapatkan garis 1 ke N untuk tampilan data yang ringkas.
R Earle Harris
1
@REarleHarris: Saya juga mencoba solusi yang sama tetapi masalahnya adalah tidak mengambil hitungan maxLines. Semua data ditampilkan dalam hitungan minLines. Apa yang bisa saya coba sekarang saya menggunakan textview kustom di xml
Sagar Devanga
119

Saya hanya berpikir saya akan menambahkannya jika Anda menggunakan:

android:inputType="textMultiLine"

Kemudian tampilan berhenti diklik. Saya mencoba mendapatkan tampilan teks multi-baris di menu slide-drawer saya yang jelas perlu merespons klik.

Tapi itu android:singleLine="false"bekerja dengan baik.

Ryan
sumber
3
Ini tidak tepat karena kesalahan serat Android sendiri menunjukkan bahwa Anda hanya menggunakan atribut ini dengan EditText dan bukan TextView.
Jared
1
Apakah Anda merujuk ke textMultiline? Saya mengatakan untuk tidak menggunakannya. singleLine baik-baik saja di TextViews: developer.android.com/reference/android/widget/…
Ryan
3
android: singleLine sudah tidak digunakan lagi sekarang
Humberto Castañeda
Apakah kamu yakin Itu tidak menyebutkan bahwa dalam dokumen saya tautan ke dalam komentar di atas, meskipun saya hanya melihat itu ditandai seperti itu dalam dokumen res. Aneh mereka tidak menyebutkan itu di halaman TextView. Masalahnya adalah bahwa solusi yang mereka sarankan (multiline) menghentikan tampilan yang dapat diklik saat saya memasukkan OP saya. developer.android.com/reference/android/R.attr.html#singleLine
Ryan
3
android: singleLine = "false" tidak digunakan lagi karena merupakan nilai default
Ashraf Alshahawy
28

Saya tidak suka jawaban. Cukup set inputType dan TextView akan beradaptasi dengan kontennya

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

Diuji pada Nexus One (2.3) dan Nexus 4 (4.4)

Maragues
sumber
52
android: inputType = "textMultiLine" bukan untuk TextView, untuk EditText dan Anda mendapatkan peringatan jika Anda mencoba melakukan ini
bhaskarc
2
Anda harus mendengarkan peringatan. Gunakan solusi @Ryans.
m02ph3u5
15

Sederhananya '\ n' di dalam teks Anda ... tidak diperlukan atribut tambahan :)

          <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"/> 
Naunidh Singh
sumber
6
solusi ini tidak dapat digunakan untuk mengatur teks secara dinamis
Sagar Devanga
@SagarDevanga Apa artinya mengatur teks secara dinamis?
juil
3
@ SagarDevanga, saya baru saja memeriksa, teks yang dinamis dan statis adalah multilined secara default (jika digunakan \n), jadi ini solusi yang tepat. Tidak singleLine=false, tidak, lines=4dan sebagainya.
CoolMind
10

Cukup tambahkan tampilan teks di 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>
Pravin Bhosale
sumber
5

Saya tidak suka solusi yang memaksa jumlah baris dalam tampilan teks. Saya lebih suka Anda mengatasinya melalui solusi yang diusulkan di sini . Seperti yang saya lihat, OP juga berjuang untuk membuat tampilan teks terlihat seperti benar dalam tabel dan shrinkColumnsmerupakan arahan yang tepat untuk menyampaikan apa yang diinginkan.

Boris Strandjev
sumber
5

Cobalah untuk bekerja dengan EditText dengan membuatnya tidak dapat diklik dan tidak fokus, Anda juga dapat menampilkan scrollbar dan menghapus underbar EditText.
Berikut ini sebuah contoh:

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

Semoga ini membantu :)

Khalil Meg
sumber
3

Pertama ganti "\n"dengan Htmlequavalent - nya "&lt;br&gt;" lalu panggil Html.fromHtml()string. Ikuti langkah-langkah di bawah ini:

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

Ini bekerja dengan sempurna.

Gulzar Bhat
sumber
2

Apa yang saya pelajari adalah menambahkan "\ n" di antara kata-kata di mana Anda ingin rem ke baris berikutnya. Sebagai contoh...

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

Waktu antara jam 5 sore dan sore memberi saya lebih banyak kendali di mana saya ingin baris saya berikutnya dimulai dan diakhiri.

Eduardo Lopez
sumber
2

Jawaban terbaik yang saya temukan untuk multiline TextView adalah:

android:inputType="textMultiLine"
Bhuvan Bhatt
sumber
8
Bukan android:inputTypeatribut untuk <EditText>bukan untuk <TextView>?
timtim
Peringatan muncul jika Anda menambahkan atribut ini ke TextView. - Android yang dikaitkan: inputType = "textMultiLine" tidak boleh digunakan dengan <TextView>. Sebenarnya atribut ini untuk EditText.
Yhondri
2

Anda dapat menggunakan 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" />
Enakhi
sumber
1
Ini ditampilkan sebagai peringatan. Tidak dimaksudkan untuk digunakan untuk TextView
Stealth Rabbi
1
inputType hanya mendukung komponen EditText.
Chamin Wickramarathna
1

Saya menggunakan:

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

itu berhasil untuk saya. 1 adalah jumlah kolom.

Susana Mar Flores
sumber
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>
Jitendra Nandiya
sumber
0

Cara paling sederhana

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

Gunakan di \nmana Anda ingin memasukkan baris baru Semoga ini akan membantu Anda

dAv dEv
sumber
0

Kuncinya adalah Textview dengan singleline=false(yang sudah ditinggalkan, tetapi harus bekerja) dikombinasikan dengan lines, maxlinesatauminlines

<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"/>
Sneg
sumber
-1

Mengapa Anda tidak mendeklarasikan string alih-alih menulis garis panjang ke file tata letak. Untuk ini, Anda harus mendeklarasikan baris kode ke dalam file layout 'android: text = "@ string / text"' dan buka \\ app \ src \ main \ res \ values ​​\ strings.xml dan tambahkan satu baris kode 'Teks multiline Anda di sini' Juga gunakan '\ n' untuk memecah baris dari titik lain jika tidak, baris akan secara otomatis disesuaikan.

Tara Prasad Sharma
sumber
-4

bagi saya tidak ada solusi yang tidak berhasil. Saya tahu ini bukan jawaban yang lengkap untuk pertanyaan ini, tetapi terkadang itu bisa membantu.

Saya menempatkan 4 tampilan teks dalam linearlayout vertikal.

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

Solusi ini bagus untuk kasus-kasus dimana teks tampilan teks konstan, seperti label.

saleh sereshki
sumber
1
Tolong jangan lakukan ini.
humble_wolf
-23

TextView akan multi-baris ketika tidak mendapatkan cukup ruang untuk masuk dalam satu baris dan singLine tidak disetel ke true.

Jika mendapat ruang dalam satu baris tidak akan multi baris.

Rasel
sumber
7
Bagaimana jika saya ingin menggunakan fill_parent daripada lebar tetap? Konten saya dipotong, jika saya melakukannya ...
happyhardik
6
Saya akan mencoba android:singleLine="false"atau android:inputType="textMultiLine"(seperti yang dijelaskan oleh Marageus). Perhatian yang android:inputType="textMultiLine"diutamakan ketika keduanya hadir
Romantic Electron
Berbagi pandangan orang lain yang berkomentar, ini benar-benar salah dan saya heran mengapa ini adalah jawaban yang diterima.
Aleks G