Bagaimana cara menambahkan jeda baris di Android TextView?


157

Saya mencoba menambahkan jeda baris di TextView.

Saya mencoba menyarankan \ n tetapi itu tidak berhasil. Inilah cara saya mengatur teks saya.

TextView txtSubTitle = (TextView)findViewById(r.id.txtSubTitle);
txtSubTitle.setText(Html.fromHtml(getResources().getString(R.string.sample_string)));

Ini string saya: <string name="sample_string">some test line 1 \n some test line 2</string>

Seharusnya terlihat seperti ini:

some test line 1
some test line 2

Tapi itu menunjukkan seperti: some test line 1 some test line 2.

Apakah saya melewatkan sesuatu?


Sudahkah Anda menetapkan Android: baris ke setidaknya 2?
Robby Pond

Subtitle saya mencapai hingga 6-9 baris dan itu tidak membungkus teks ke baris berikutnya tetapi jika saya ingin istirahat itu tidak rusak.
dropsOfJupiter

Anda harus memposting solusi Anda sebagai jawaban dan menerimanya, sehingga orang dapat membenarkan!
bigstones

1
Saya membuat proyek sampel kecil untuk menggambarkan berbagai cara untuk menyandikan linebreak, dan efek sampingnya. Spoiler: \nmemang cara terbaik. github.com/paour/StringResourceTest
Pierre-Luc Paour

Mengapa pertanyaan ini dipilih? Apakah Anda melihatnya sama sekali? Solusinya sangat sederhana, cukup hapus Html.fromHtml()fungsi itu dan cukup gunakan txtSubTitle.setText(getResources().getString(R.string.sample_string)).
Bugs Terjadi

Jawaban:


222

\n bekerja untuk saya, seperti ini:

<TextView android:text="First line\nNext line"

87
Hanya \nseorang diri yang akan bekerja ... Jangan berpikir \rmelakukan apa pun.
Peter Ajtai

5
\ r \ n ini adalah baris baru untuk windows, dan \ n adalah baris baru untuk linux
Guilherme Torres Castro

ini tidak berfungsi untuk saya <TextView android: layout_width = "50dp" android: layout_height = "70dp" android: layout_weight = "1" android: background = "@ drawable / keypad1" android: gravity = "center" android: text = " 2 ABC "/>
AndroidRaji

1
Menyesatkan karena tidak menyebutkan perubahan lain yang Anda buat yang menambahkan tanda kutip di string.
Patrick

2
'\ r' sebenarnya ditampilkan sebagai 'r' dalam teks. Jadi, seperti yang disarankan orang lain, '\ n' berhasil.
Miha Markic

93

ok tahu itu:

<string name="sample_string"><![CDATA[some test line 1 <br />some test line 2]]></string>

jadi bungkus dalam CDATA diperlukan dan istirahat ditambahkan ke dalam sebagai tag html


3
Gunakan yang ini di sumber daya string & # xa; Seperti "Hai! Baris pertama! & # Xa; Ini adalah baris kedua"
RexSplode

3
Ini membutuhkan penggunaan Html.fromHtml(), yang sedikit banyak untuk linebreak sederhana, dan tidak didukung oleh penyedia terjemahan.
Pierre-Luc Paour

Ayolah, serius? Anda tidak dapat menemukan masalah dalam pertanyaannya?
Bugs Terjadi

68

Android versi 1.6 tidak mengenali \ r \ n. Sebagai gantinya, gunakan: System.getProperty ("line.separator")

String s = "Line 1"
           + System.getProperty ("line.separator")
           + "Line 2"
           + System.getProperty ("line.separator");

3
Suara positif! Ini berhasil untuk saya! Jika Anda hanya ingin menambahkan satu baris dalam bentuk: textView.setText (string1 + System.getProperty ("line.separator") + string2); maka itu berhasil memperlakukan, terima kasih!
Dua kali Dilingkari

WAT? Apakah ada versi Android yang menjalankan Windows?
maaartinus

3
Bagi siapa pun yang menggunakan Xamarin ini adalah yang setara: Java.Lang.JavaSystem.LineSeparator ()
Steve

1
Mengapa tidak hanya System.lineSeparator ()?
George Z.

60

Linebreak (\ n) hanya berfungsi jika Anda memasukkan nilai sumber daya string Anda dalam kutipan seperti ini:

<string name="sample_string">"some test line 1 \n some test line 2"</string>

Itu tidak akan melakukan linebreak jika Anda meletakkannya tanpa tanda kutip seperti ini:

<string name="sample_string">some test line 1 \n some test line 2</string>

ya itu mudah.


3
Saya hanya ingin menambahkan bahwa kutipan-hal ini juga berfungsi dengan baik dengan karakter khusus dalam sumber daya string atau dengan bahasa seperti Yunani atau Rusia ... (jika Anda mengalami masalah)
datayeah

1
Terima kasih, saya pikir menggunakan tanda kutip adalah solusi yang lebih baik untuk mempertahankan keterbacaan untuk teks multi-baris yang panjang <string name="sample_string">"some test line 1 some test line 2 line 3" </string>
xinthink

1
Menggunakan tanda kutip memiliki efek samping lain, seperti membuat spasi selalu signifikan (tanpa tanda kutip, beberapa spasi dalam satu baris, seperti dalam indentasi, diciutkan).
Pierre-Luc Paour

33

Mencoba semua hal di atas, lakukan beberapa riset sendiri yang menghasilkan solusi berikut untuk merender karakter linefeed escape:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. Dengan menggunakan metode ganti, Anda perlu memfilter umpan baris yang lolos (mis. '\\ n')

  2. Hanya dengan demikian setiap instance dari feed baris '\ n' karakter escape akan dirender ke dalam linefeed yang sebenarnya

Untuk contoh ini saya menggunakan database noSQL Google Apps Scripting (ScriptDb) dengan data berformat JSON.

Ceria: D


text.replace ("\\ n", System.getProperty ("line.separator"))
Mussa

18

Ini berhasil untuk saya

android:text="First \n Second"

2
Contoh Anda sepertinya menyertakan teks dalam sumber daya tata letak, yang merupakan no-no (tidak mungkin dilokalkan) yang besar.
Pierre-Luc Paour

17

Ada dua cara untuk mengatasi hal ini. Jika Anda menggunakan string sebagai string mentah, Anda harus menggunakan karakter baris baru. Jika Anda menggunakannya sebagai html, misalnya dengan menguraikannya Html.fromString, varian kedua lebih baik.

1) Karakter baris baru \n

<string name="sample> This\nis a sample</string>

2) Tag baris baru html <br>atau<br />

<string name="sample> This<br>is a sample</string>

6
Saya tidak melakukan downvote tetapi saya pikir kode Anda salah, Anda perlu "& lt; br>" alih-alih "Situs" itu tidak akan berfungsi karena <adalah simbol yang dipesan.
JPM

<br>, <u>, <b>Dan <i>tag yang diperbolehkan dalam sumber string yang tanpa melarikan diri, dan benar diterapkan oleh TextView.setText(resId). Mereka dilucuti jika menggunakan Context.getString(resId), kecuali dibungkus CDATAbagian.
Pierre-Luc Paour

16

Ini bekerja untuk saya, mungkin seseorang akan menemukan ini bermanfaat:

TextView textField = (TextView) findViewById(R.id.textview1);
textField.setText("First line of text" + System.getProperty("line.separator") + "Linija 2");

11

Jika Anda menggunakan XML untuk mendeklarasikan penggunaan TextView android:singleLine = "false"atau di Java, gunakantxtSubTitle.setSingleLine(false);


tidak, itu tidak berhasil. Apakah ada hubungannya dengan Html.fromHtml () dan sumber daya string?
dropsOfJupiter

@dropsOfJupiter: sudahkah Anda melihat apa panggilan Html.fromHtml () kembali? Saya ingin tahu untuk menugaskannya ke String dan melihatnya di debugger.
slund

10

Digunakan Android Studio 0.8.9. Satu-satunya cara bekerja untuk saya adalah menggunakan \n. Tidak membungkus dengan CDATA <br>atau <br />bekerja.


8

Saya menggunakan yang berikut ini:

YOUR_TEXTVIEW.setText("Got some text \n another line");

8

sangat mudah: gunakan "\ n"

    String aString1 = "abcd";
    String aString2 = "1234";
    mSomeTextView.setText(aString1 + "\n" + aString2);

\ n sesuai dengan ASCII char 0xA, yang merupakan 'LF' atau umpan baris

berkorespondensi dengan ASCII char 0xD, yang merupakan 'CR' atau carriage return

ini tanggal kembali dari mesin tik pertama, di mana Anda dapat memilih untuk hanya melakukan umpan baris (dan ketik hanya satu baris lebih rendah), atau umpan baris + carriage return (yang juga bergerak ke awal baris)

di Android / java \ n sesuai dengan carriage return + line feed, karena Anda hanya akan 'menimpa' baris yang sama


6

Coba periksa kembali lokasi Anda. Mungkin, Anda mencoba mengedit satu file (pelokalan), tetapi sebenarnya memprogram menggunakan yang lain, seperti dalam kasus saya . Bahasa sistem default adalah bahasa Rusia, sementara saya mencoba mengedit lokalisasi bahasa Inggris.

Dalam kasus saya, solusi yang berfungsi adalah menggunakan "\ n" sebagai pemisah baris:

    <string name="string_one">line one.
    \nline two;
    \nline three.</string>

4

Anda juga bisa menambahkan "&lt;br&#47;&gt;" bukan \ n.

Ini adalah kode HTML untuk <br/>

Dan kemudian Anda dapat menambahkan teks ke TexView:

articleTextView.setText(Html.fromHtml(textForTextView));

nea, jangan berpikir begitu. Android sebenarnya akan mencetak omong kosong itu. Saya mencoba. Ini bekerja dengan baik dalam HTML tetapi tidak di sini, terutama ketika Anda melakukan Html.fromHTML ("string saya dari file xml")
dropsOfJupiter

@drops - Jangan lupa toString ==> Html.fromHtml(textForTextView).toString()--- Dan kemudian Anda dapat melakukan: articleTextView.setText(Html.fromHtml("text before break<br/>text after break").toString());-------- Dengan kata lain cukup gunakan <br/>langsung di dalamfromHtml()
Peter Ajtai

&lt;br/>harus cukup untuk memastikan informasi gaya tidak dilucuti. (berdasarkan dokumentasi resmi)
jpmcosta

3

Anda juga dapat menggunakan String-Editor Android Studio, secara otomatis menghasilkan garis rem dan hal-hal seperti itu ...


2

Seperti Html.fromHtmlsudah usang saya hanya saya menggunakan kode ini untuk mendapatkan String2 di baris berikutnya.

textView.setText(fromHtml("String1 <br/> String2"));

.

@SuppressWarnings("deprecation")
    public static Spanned fromHtml(String html){
        Spanned result;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
        } else {
            result = Html.fromHtml(html);
        }
        return result;
    }

2

Cara paling mudah untuk melakukannya adalah dengan membuka nilai / string (di folder sumber daya Anda)

Nyatakan string di sana:

    <string name="example_string">Line 1\Line2\Line n</string>

Dan dalam file xml spesifik Anda, panggil saja string seperti

    <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/example_string" />

1

Saya menemukan metode lain: Diperlukan untuk menambahkan atribut " android: maxWidth =" 40dp " ". Tentu saja, itu mungkin tidak bekerja dengan sempurna, tetapi memberikan garis istirahat.


1

\ n tidak bekerja untuk saya. Saya bisa memperbaiki masalah dengan mengubah xml ke teks dan membangun properti teks textview seperti di bawah ini.

android:text="Line 1
Line 2
Line 3

DoubleSpace"

Semoga ini membantu mereka yang mengatakan bahwa itu tidak berhasil untuk mereka.


Saya tidak yakin ini solusi yang baik. Hanya ada \nkarakter tersembunyi di sana.
Almo

1

Saya membaca teks saya dari file, jadi saya mengambil pendekatan yang sedikit berbeda, karena menambahkan \ n ke file mengakibatkan \ n muncul di teks.

    final TextView textView = (TextView) findViewById(R.id.warm_up_view);
    StringBuilder sb = new StringBuilder();
    Scanner scanner = new Scanner(getResources().openRawResource(R.raw.warm_up_file));
    while (scanner.hasNextLine()) {
      sb.append(scanner.nextLine());
      sb.append("\n");
    }

    textView.setText(sb.toString());

0

Mungkin Anda dapat menempatkan lf ke dalam teks, tetapi tidak menampilkan? Pastikan Anda memiliki ketinggian yang cukup untuk kontrol. Sebagai contoh:

Benar:

android:layout_height="wrap_content"

Mungkin salah:

android:layout_height="10dp"

0

Dalam kasus saya, saya memecahkan masalah ini dengan menambahkan yang berikut:

android:inputType="textMultiLine"

Jenis input untuk EditText bukan TextView
clauziere

0

coba ini:

         TextView calloutContent = new TextView(getApplicationContext());
         calloutContent.setTextColor(Color.BLACK);
         calloutContent.setSingleLine(false);
         calloutContent.setLines(2);
         calloutContent.setText(" line 1" + System.getProperty ("line.separator")+"  line2" );

0

Saya merasa diperlukan jawaban yang lebih lengkap untuk menggambarkan bagaimana ini bekerja lebih menyeluruh.

Pertama, jika Anda membutuhkan pemformatan tingkat lanjut, periksa manual tentang cara menggunakan HTML dalam sumber daya string .
Maka Anda bisa menggunakannya<br/> , dll. Namun, ini membutuhkan pengaturan teks menggunakan kode.

Jika hanya teks biasa, ada banyak cara untuk melepaskan karakter baris baru (LF) dalam sumber daya string statis .

Menutup string dalam tanda kutip ganda

Cara terbersih adalah dengan melampirkan string dalam tanda kutip ganda.
Ini akan membuatnya jadi spasi putih ditafsirkan persis seperti yang ditampilkan, bukan runtuh.
Maka Anda cukup menggunakan baris baru secara normal dalam metode ini (jangan gunakan indentasi).

<string name="str1">"Line 1.
Line 2.
Line 3."</string>

Perhatikan bahwa beberapa karakter memerlukan pelarian khusus dalam mode ini (seperti \").

Urutan melarikan diri di bawah ini juga berfungsi dalam mode yang dikutip.

Saat menggunakan satu baris dalam XML untuk mewakili string multi-baris

Cara paling elegan untuk keluar dari baris baru dalam XML adalah dengan titik kode (10 atau 0xA dalam hex) dengan menggunakan entitas XML / HTML &#xA;atau &#10;. Ini adalah cara XML untuk keluar dari karakter apa pun .
Namun, ini tampaknya hanya berfungsi dalam mode yang dikutip.

Metode lain adalah dengan hanya menggunakan \n, meskipun itu secara negatif mempengaruhi keterbacaan, menurut saya (karena itu bukan urutan pelarian khusus dalam XML, Android Studio tidak menyorotnya).

<string name="str1">"Line 1.&#xA;Line 2.&#10;Line 3."</string>
<string name="str1">"Line 1.\nLine 2.\nLine 3."</string>
<string name="str1">Line 1.\nLine 2.\nLine 3.</string>

Jangan menyertakan baris baru atau spasi putih apa pun setelah urutan pelarian ini, karena itu akan ditafsirkan sebagai ruang ekstra.


-1

Gunakan pemecah teks seperti ini (\ n):

<string name="sample_string"><![CDATA[some test line 1 \n some test line 2]]></string>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.