Cara membungkus teks dalam textview di Android

86

Apakah ada yang tahu cara membungkus teks di TextView di platform Android. yaitu jika teks dalam tampilan teks melebihi panjang layar, itu harus ditampilkan di baris kedua.

Saya telah mencari dan mencoba yang berikut ini:

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

Tapi tidak ada yang berhasil ..

Adakah yang bisa menyarankan bagaimana saya bisa melakukannya.

Sameer
sumber
7
TextView harus membungkus kata secara default. Bisakah Anda memposting seluruh tata letak Anda?
danh32
Mungkinkah Textview berada di dalam tata letak tabel? Jika demikian saya punya jawaban untuk Anda.
JohnFx
1
Dalam kasus saya, setelah menambahkan sekitar setengah lusin atribut (dijelaskan di bawah) untuk memaksa textview membungkus teks di beberapa baris, tanpa hasil, saya perhatikan saya memiliki atribut android:inputType="textPersonName". Rupanya itu telah ditambahkan oleh alat desain Android Studio. Menghapus atribut itu memperbaiki masalah! Mungkin ada jenis masukan lain yang juga mencegah penggabungan.
LarsH

Jawaban:

57

Bagi saya masalah ini hanya terjadi di Android <4.0

Kombinasi parameter yang saya gunakan adalah:

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

Jumlah maxLines tampaknya merupakan potongan terakhir acak yang membuat TextView saya terbungkus.

Guykun
sumber
9
Saya tahu ini utas lama sekarang tetapi saya pikir saya akan memposting temuan saya. Saya hanya menggunakan 'android: maxLines' dan kemudian membungkus teks saya. Bersorak @Guykun
StuStirling
Sekali lagi, ini sama saja dengan menyetel tinggi TextView ke match_parent, yang tidak sama dengan membuat tinggi TextView diperluas untuk menyertakan baris tambahan.
SMBiggs
51

Tata Letak Batasan

<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"/>
  • Pastikan lebar tata letak Anda nol
  • kendala kiri / kanan ditentukan
  • tinggi layout wrap_content memungkinkan perluasan ke atas / bawah.
  • Atur android:maxLines="2"untuk mencegah ekspansi vertikal (2 hanyalah contoh)
  • Elips bermasalah. ide bagus dengan garis maksimalandroid:ellipsize="end"

Lebar 0dp memungkinkan pembatas kiri / kanan untuk menentukan seberapa lebar widget Anda.

Menyetel batasan kiri / kanan menyetel lebar sebenarnya dari widget Anda, yang di dalamnya teks Anda akan terbungkus.

Dokumen Tata Letak Batasan

Tukang roti
sumber
Iya! Persis seperti inilah cara kerjanya! Pastikan Anda menyetel lebar ke 0dp
Yoraco Gonzales
pengaturan pembatas kiri & kanan membantu membuatnya membungkus bagi saya, alih-alih teks meluap melampaui batas kanan
Jia Tse
31

Untuk kasus di mana TextViewada di dalam a TableLayout, solusinya adalah mengatur android:shrinkColumns="1"pada TableLayout. (Ganti 1dengan nomor kolom TextView yang ingin Anda bungkus. (0-indexed))

AFAICT, tidak ada atribut lain yang dibutuhkan di TextView.

Untuk kasus lain, lihat jawaban lain di sini.

FWIW, saya awalnya mendapatkannya untuk bekerja dengan

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

tetapi itu menghasilkan beberapa ruang kosong ekstra di bagian bawah Dialog yang menampung semuanya.

aij
sumber
Inilah yang saya cari! Jika tidak, kata-kata saya akan terputus
Carson Holzheimer
12

Anda harus menggunakan 2 parameter:

  • android:ellipsize="none" : teks tidak dipotong pada lebar tampilan teks

  • android:scrollHorizontally="false" teks membungkus sebanyak mungkin baris yang diperlukan

Kartaguez
sumber
5
Itu tidak berhasil untukku. (FWIW, saya memiliki TextView di TableRow di TableLayout.)
aij
8

Gunakan app:breakStrategy="simple"dalam AppCompatTextView, itu akan mengontrol tata letak paragraf.

Ini memiliki tiga nilai konstan

  • seimbang
  • kualitas tinggi
  • sederhana

Mendesain di TextView xml Anda

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

Jika level api minimum Anda saat ini adalah 23 atau lebih di Coding

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

Untuk referensi lebih lanjut lihat BreakStrategy ini

Gambar textview breakStrategy

Nirav Bhavsar
sumber
7

Ini harus memperbaiki masalah Anda: android:layout_weight="1".

pengguna755121
sumber
Ini hanya menyebabkan TextView meluas untuk mengambil ruang sebanyak mungkin, yang sama dengan menyetel Tinggi ke match_parent. Tidak persis sama seperti yang diinginkan OP.
SMBiggs
1
Dalam kasus TableLayout, layout_weight="1"perbaiki masalahnya untuk saya. Namun, TableRow saya yang berisi TextView, telah layout_heightdisetel ke nilai tertentu. Mungkin akan berguna bagi seseorang
kit
5

Oke teman-teman kebenaran ada di suatu tempat di tengah karena Anda harus melihat masalah dari pandangan orang tua dan anak. Solusi di bawah ini HANYA berfungsi ketika mode spinner = dialogterlepas dari versi Android (tidak ada masalah di sana .. mengujinya di VD dan DesireS dengan Android => 2.2):

  1. . Setel mode spinner (induk) Anda seperti:

    android:spinnerMode="dialog"  
    
  2. Setel properti textview (tampilan kustom anak) ke:

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

Saya harap ini juga berhasil untuk Anda.

skourkos.dll
sumber
Mencoba banyak hal untuk membuatnya berfungsi dalam mode 'dropdown' tetapi tidak ada yang berhasil. Sekarang tentukan mode 'dialog'.
Mangesh
4

Dengan menyetel android:maxEmske nilai yang diberikan bersama dengan android:layout_weight="1"akan menyebabkan TextView membungkus setelah mencapai panjang ems yang ditentukan.

Freddroid
sumber
Berfungsi untuk TextView yang ditempatkan di RelativeLayout juga.
ayz4sci
telah mencari berjam-jam, terima kasih itu berfungsi dengan baik pada constraintLayout juga
TarekB
3

Di Android Studio 2.2.3 di bawah inputTypeproperti ada properti bernama textMultiLine. Memilih opsi ini menyelesaikan masalah serupa untuk saya. Saya harap itu membantu.

pengguna7652193
sumber
2
Ini untuk EditText, bukan Textview
PsychedelicSubstance
2

Baru saja mengerjakan TextView di dalam tata letak di dalam RecyclerView. Saya telah teks mendapatkan memotong, mantan, untuk Read this message, saya melihat: Read this. Saya mencoba mengatur android:maxLines="2"pada TextView, tetapi tidak ada yang berubah. Namun, android:lines="2"menghasilkan di Read thisbaris pertama dan messagedi baris ke-2.

Stan Kurdziel
sumber
1

Saya memiliki masalah yang sama. Perubahan berikut membuatnya berhasil -

android:layout_width="wrap_content"

Elipsis, maxLines, atau layout_weight - semua tidak ada bedanya. Catatan - Lebar induk juga disetel sebagai wrap_content.

Medha
sumber
1

Yang harus Anda lakukan adalah mengatur lebar tampilan teks Anda .

android: layout_width = "60dp"

Anda dapat mengubah lebar sesuai pilihan Anda. Ketik saja kalimat panjang untuk memeriksa apakah berfungsi seperti ini

android: text = "Saya ingin menjadi salah satu teknisi perangkat lunak kelas dunia"

Akindev
sumber
1

Coba pendekatan @ Guykun

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

Selain itu, pastikan lebar orang tua tidak disetel untuk membungkus konten. Ini adalah hal yang saya lewatkan.

Shailendra Suriyal
sumber
0

Saya menggunakan Android 2.2 dan textview saya akan secara otomatis masuk ke baris berikutnya jika melebihi layar.

Jika Anda ingin teks masuk ke baris berikutnya sebelum akhir layar, cukup tambahkan (masukkan saja nilai dp Anda sendiri). Ini akan berguna jika Anda memiliki gambar di sebelah kanan teks.

android:layout_marginRight="52dp"
Britc
sumber
0

Cukup aneh - Saya membuat TextView dalam Kode dan dibungkus - meskipun saya tidak menyetel apa pun kecuali hal-hal standar - tetapi lihat sendiri:

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

Seperti yang Anda lihat dari definisi params, saya menggunakan LinearLayout. Label kelas hanya memperluas TextView - tidak melakukan apa pun di sana kecuali menyetel ukuran font dan warna font.

Saat menjalankannya di emulator (API Level 9), teks secara otomatis menggabungkan 3 baris.

Ready4Android
sumber
Perhatikan penggunaan kode ini LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);. Kemungkinan besar itu pembungkus yang Anda anggap "automagic"
nemesisfixx
0

Cukup atur layout_withke ukuran tertentu, saat teks memenuhi lebar maksimum, teks akan meluap ke baris berikutnya yang menyebabkan efek bungkus.

<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"/>
Frank Odoom
sumber
0

Caranya adalah dengan lebar textView, coba jadikan nomor khusus seperti:

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

Saya sudah mencoba banyak solusi tanpa hasil apa pun, saya sudah mencoba:

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

satu-satunya hal yang memicu opsi bungkus adalah lebar khusus

Ahmed Khalid Kadhim
sumber
-1

Anda perlu menambahkan TextView Anda di ScrollView dengan sesuatu seperti ini:

<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>
Ludovic Landry
sumber
4
Terima kasih atas balasan Anda Tapi tujuan saya adalah untuk membungkus teks ketika melebihi panjang garis bukan untuk meletakkan penggulung horizontal.
Sameer