Android TextView'de satır sonu nasıl eklenir?


158

TextView bir satır sonu eklemek çalışıyorum.

Önerilen \ n denedim ama bu hiçbir şey yapmaz. Metinlerimi şöyle ayarlıyorum.

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

Bu benim Dize: <string name="sample_string">some test line 1 \n some test line 2</string>

Şöyle görünmelidir:

some test line 1
some test line 2

Ama şöyle gösteriyor: some test line 1 some test line 2.

Bir şey mi kaçırıyorum?


android: satırları en az 2 olarak ayarladınız mı?
Robby Pond

benim Altyazı zaten 6-9 satır kadar almak ve bir sonraki satıra metin sarmak ama eğer kırmak istiyorsanız kırılmaz.
dropsOfJupiter

çözümünüzü bir cevap olarak göndermeli ve kabul etmelisiniz, böylece insanlar yükselebilir!
bigstones

1
Çizgileri kodlamanın çeşitli yollarını ve yan etkilerini göstermek için küçük bir örnek proje oluşturdum. Spoiler: \ngerçekten en iyi yoldur. github.com/paour/StringResourceTest
Pierre-Luc Paour

Bu soru neden bu kadar oylandı? Hiç baktın mı? Çözüm çok basit, sadece bu Html.fromHtml()işlevi kaldırın ve kullanın txtSubTitle.setText(getResources().getString(R.string.sample_string)).
Böcekler

Yanıtlar:


222

\n benim için çalışıyor, şöyle:

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

87
Sadece \nyalnız çalışacak ... Hiçbir \rşey yapmadığını düşünme .
Peter Ajtai

5
\ r \ n windows için bir satır sonu ve \ n linux için bir satır sonu
Guilherme Torres Castro

benim için çalışmıyor <TextView android: layout_width = "50dp" android: layout_height = "70dp" android: layout_weight = "1" android: background = "@ çekilebilir / tuş takımı1" android: gravity = "center" android: text = " 2 ABC "/>
AndroidRaji

1
Dizenin içine tırnak ekleyerek yaptığınız diğer değişiklikten bahsetmediğiniz için yanıltıcı.
Patrick

2
'\ r' aslında metinde 'r' olarak gösterilir. Diğerlerinin de belirttiği gibi, '\ n' hile yapar.
Miha Markic

93

tamam anladım:

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

bu yüzden CDATA'ya sarın ve molalar html etiketi olarak eklendi


3
Bunu bir dize kaynağında kullanın & # xa; "Merhaba! İlk satır! & # Xa; Bu ikinci satır" gibi
RexSplode

3
Bu, Html.fromHtml()basit bir satır kırılması için biraz fazla olan ve çeviri sağlayıcıları tarafından iyi desteklenmeyen kullanımı gerektirir.
Pierre-Luc Paour

Hadi adamım, cidden? Sorusunda sorunu bulamadınız mı?
Böcekler

68

Android sürüm 1.6 \ r \ n tanımıyor. Bunun yerine şunu kullanın: System.getProperty ("line.separator")

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

3
Oyla! Bu benim için çalıştı! Yalnızca forma satır sonu eklemek isterseniz: textView.setText (string1 + System.getProperty ("line.separator") + string2); o zaman bir tedavi çalışıyor, teşekkür ederim!
İki kez

WAT? Windows çalıştıran bir Android sürümü var mı?
maaartinus

3
Xamarin kullanan herkes için bu eşdeğerdir: Java.Lang.JavaSystem.LineSeparator ()
Steve

1
Neden sadece System.lineSeparator () değil?
George Z.

60

Çizgi satırları (\ n) yalnızca dize kaynak değerinizi aşağıdaki gibi tırnak içine alırsanız çalışır:

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

Böyle tırnak işaretleri olmadan koyarsanız, çizgi satırları yapmaz:

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

evet, bu kadar kolay.


3
Ben sadece bu alıntı şeyler de dize kaynaklarda özel karakterler veya Yunan veya Rusça gibi diller ile iyi çalışır eklemek istedim ... (herhangi bir sorunla karşılaşırsanız)
datayeah

1
Teşekkürler, uzun çok satırlı metinler için okunabilirliği korumak için tırnak işareti kullanmanın daha iyi bir çözüm olduğunu düşünüyorum <string name="sample_string">"some test line 1 some test line 2 line 3" </string>
xinthink

1
Tırnak kullanmanın boşlukları her zaman anlamlı hale getirme gibi başka yan etkileri de vardır (tırnak işaretleri olmadan, girintiler gibi bir satırda birden çok boşluk daraltılır).
Pierre-Luc Paour

33

Yukarıdakilerin hepsini denedim, kendi araştırmalarımı yaptım ve hat besleme kaçış karakterleri oluşturmak için aşağıdaki çözümle sonuçlandım:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. Filtre gereken yöntemi yerine kullanılması kaçan linefeeds (örneğin '\\ n')

  2. Ancak o zaman her satır besleme '\ n' kaçış karakteri örneği gerçek satır beslemesine dönüştürülür

Bu örnekte JSON biçimli verilerle bir Google Apps Scripting noSQL veritabanı (ScriptDb) kullandım.

Şerefe: D


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

18

Bu benim için çalıştı

android:text="First \n Second"

2
Örneğiniz, büyük bir hayır-hayır (yerelleştirilmesi imkansız) olan bir düzen kaynağındaki metni içerdiği anlaşılıyor.
Pierre-Luc Paour

17

Bunun etrafında iki yol var. Dizenizi ham dize olarak kullanırsanız, yeni satır karakterini kullanmanız gerekir. Html olarak kullanırsanız, örneğin ile ayrıştırarak Html.fromString, ikinci varyant daha iyidir.

1) Yeni satır karakteri \n

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

2) Html newline etiketi <br>veya<br />

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

6
Ben aşağı almadım ama kodunuzun yanlış olduğunu düşünüyorum "yerine" & lt; br> "yerine" <br> "işe yaramaz çünkü <ayrılmış bir semboldür.
JPM

<br>, <u>, <b>Ve <i>etiketleri kaçış olmadan dize kaynaklarında izin verilir ve doğru ile uygulanır TextView.setText(resId). Context.getString(resId)Bir CDATAbölüme sarılmadıkça, kullanılırlarsa soyulurlar .
Pierre-Luc Paour

16

Bu benim için çalıştı, belki birisi bunu yararlı bulabilir:

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

11

TextView kullanımınızı android:singleLine = "false"veya Java'da bildirmek için XML kullanıyorsanız ,txtSubTitle.setSingleLine(false);


Hayır, işe yaramadı. Html.fromHtml () ve dize kaynakları ile ilgisi var mı?
Jupiter

@dropsOfJupiter: Html.fromHtml () çağrısının ne döndürdüğüne baktınız mı? Bir String'e atamak ve hata ayıklayıcıda bakmak merak ediyorum.
slund

10

Android Studio 0.8.9 kullanıldı. Benim için çalışmanın tek yolu kullanmak \n. CDATA'da ne de birlikte ne sarma <br>veya <br />çalıştı.


8

Aşağıdakileri kullanıyorum:

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

8

çok kolay: "\ n" kullanın

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

\ n, 'LF' veya satır besleme olan ASCII karakter 0xA'ya karşılık gelir

'r' CR 'veya satır başı olan ASCII karakter 0xD'ye karşılık gelir

bu, yalnızca satır besleme (ve yalnızca bir satır daha düşük) yazmayı veya satır besleme + satır başı (satırın başına da geçmeyi seçmeyi) seçebileceğiniz ilk daktilolardan gelir.

Android / java'da \ n, bir satır başı + satır beslemesine karşılık gelir, aksi takdirde aynı satırın 'üzerine yazacağınız'


6

Yerelleştirmelerinizi tekrar kontrol etmeye çalışın. Muhtemelen, bir dosyayı (yerelleştirme) düzenlemeye çalışıyorsunuz, ancak aslında benim durumumda olduğu gibi başka bir dosyayı kullanarak programlıyorsunuz . İngilizce yerelleştirmeyi düzenlemeye çalışırken varsayılan sistem dili rusça.

Benim durumumda, çalışma çözümü satır ayırıcı olarak "\ n" kullanmaktır:

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

4

Ayrıca "&lt;br&#47;&gt;"\ n yerine ekleyebilirsiniz .

HTML çıkış kodudur <br/>

Ve sonra TexView'e metin ekleyebilirsiniz:

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

nea, sanmıyorum. Android aslında bu mantıksızlığı yazdıracak. Denedim. HTML'de iyi çalışıyor, ancak burada değil, özellikle Html.fromHTML ("xml dosyasından benim
dizgimi

@drops - UnutmayınString ==> Html.fromHtml(textForTextView).toString()--- Ve sonra şunları yapabilirsiniz: articleTextView.setText(Html.fromHtml("text before break<br/>text after break").toString());-------- Başka bir deyişle, <br/>doğrudan içeride kullanınfromHtml()
Peter Ajtai

&lt;br/>stil bilgilerinin çıkarılmadığından emin olmak için yeterli olmalıdır. (resmi belgelere dayanarak)
jpmcosta

3

Android Studio'nun String-Editor'ını da kullanabilirsiniz, otomatik olarak hat frenleri ve bunun gibi şeyler üretir ...


2

Kullanımdan Html.fromHtmlkaldırıldığım için bu kodu bir sonraki satırda String2 almak için kullandım.

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

Bunu yapmanın en kolay yolu, değerlere / dizelere (kaynak klasörünüzde) gitmektir.

Orada bir dize bildirin:

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

Ve özel xml dosyanızda dizeyi

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

1

Başka bir yöntem buldum: " android: maxWidth =" 40dp " " özniteliğini eklemek için gereklidir . Tabii ki, mükemmel çalışmayabilir, ancak bir satır sonu verir.


1

\ n benim için çalışmıyordu. Metni xml değiştirerek ve aşağıdaki gibi textview metin özelliğini oluşturarak sorunu çözebildim.

android:text="Line 1
Line 2
Line 3

DoubleSpace"

Umarım bu \ n onlar için çalışmadı diyenlere yardımcı olur.


Bunun iyi bir çözüm olduğuna ikna olmadım. Orada sadece gizli \nkarakterler var.
Almo

1

Metnimi bir dosyadan okuyorum, bu yüzden dosyaya \ n eklenmesi \ n metinde görünmesine neden olduğundan biraz farklı bir yaklaşım izledim .

    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

Belki lf'yi metne koyabilirsiniz , ancak görüntülenmez? Kontrol için yeterli yüksekliğe sahip olduğunuzdan emin olun. Örneğin:

Doğru:

android:layout_height="wrap_content"

Yanlış olabilir:

android:layout_height="10dp"

0

Benim durumumda, aşağıdakileri ekleyerek bu sorunu çözdüm:

android:inputType="textMultiLine"

Giriş türü EditText içindir TextView
clauziere

0

bunu dene:

         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

Bunun nasıl daha ayrıntılı çalıştığını açıklamak için daha eksiksiz bir cevaba ihtiyaç duyulduğunu hissediyorum.

Öncelikle, gelişmiş biçimlendirmeye ihtiyacınız varsa , dize kaynaklarında HTML'nin nasıl kullanılacağına ilişkin el kitabına bakın .
Sonra <br/>, vb. Kullanabilirsiniz . Ancak, bu kod kullanarak metni ayarlamayı gerektirir.

Sadece düz metinse, statik dize kaynaklarında yeni satır karakterinden (LF) kaçmanın birçok yolu vardır .

Dizeyi çift tırnak içine alma

En temiz yol, dizeyi çift tırnak içine almaktır.
Bu, beyaz alanın tam olarak göründüğü gibi yorumlanmasını sağlar, böylece daraltılmaz.
O zaman bu satırda normalde normal satır kullanabilirsiniz (girinti kullanmayın).

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

Bazı karakterlerin bu modda (örneğin \") özel çıkış karakterleri gerektirdiğini unutmayın .

Aşağıdaki kaçış dizileri de alıntılanmış modda çalışır.

Çok satırlı dizeleri temsil etmek için XML'de tek satır kullanırken

XML'de yeni satırdan kaçmanın en zarif yolu, XML / HTML varlığını &#xA;veya kodunu kullanarak kod noktasıdır (onaltılık 10 veya 0xA) &#10;. Bu, herhangi bir karakterden kaçmanın XML yoludur .
Ancak, bu sadece alıntı modunda çalışıyor gibi görünüyor.

Başka bir yöntem, \nokunabilirliği olumsuz etkilese de, basitçe kullanmaktır (bence XML'de özel bir kaçış dizisi olmadığı için Android Studio bunu vurgulamıyor).

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

Bu kaçış dizilerinden herhangi birine yeni satır veya boşluk eklemeyin, çünkü bu fazladan boşluk olarak yorumlanacaktır.


-1

Şu şekilde metin sonu kullanın (\ n):

<string name="sample_string"><![CDATA[some test line 1 \n some test line 2]]></string>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.