Android TextView में लाइन ब्रेक कैसे जोड़ें?


157

मैं TextView में एक लाइन ब्रेक जोड़ने की कोशिश कर रहा हूं।

मैं \ n का सुझाव देने की कोशिश की, लेकिन वह कुछ नहीं करता है। यहाँ मैंने अपने ग्रंथों को कैसे सेट किया है।

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

यह मेरी स्ट्रिंग है: <string name="sample_string">some test line 1 \n some test line 2</string>

यह ऐसा दिखाना चाहिए:

some test line 1
some test line 2

लेकिन ऐसा तरह दिखाता है: some test line 1 some test line 2

क्या मैं कुछ भूल रहा हूँ?


क्या आपने Android सेट किया है: लाइनें कम से कम 2 के लिए?
रॉबी पॉन्ड

मेरी सबटाइटल पहले से ही 6-9 लाइनों तक मिलती है और यह टेक्स्ट को अगली पंक्ति में लपेटती है लेकिन अगर मैं इसे तोड़ना चाहता हूं तो यह नहीं टूटती है।
dropsOfJupiter

आपको अपना समाधान एक उत्तर के रूप में पोस्ट करना चाहिए और इसे स्वीकार करना चाहिए, ताकि लोग अपडाउन कर सकें!
बिगस्टोन्स

1
मैंने लाइनब्रेक और उनके साइड-इफेक्ट्स को एनकोड करने के विभिन्न तरीकों को चित्रित करने के लिए एक छोटा सा नमूना प्रोजेक्ट बनाया। Spoiler: \nवास्तव में सबसे अच्छा तरीका है। github.com/paour/StringResourceTest
पियरे-ल्यूक पौर

यह प्रश्न इतना मतदान क्यों है? क्या आपने इसे बिल्कुल देखा? समाधान बहुत सरल है, बस उस Html.fromHtml()फ़ंक्शन को हटा दें और बस उपयोग करें txtSubTitle.setText(getResources().getString(R.string.sample_string))
कीड़े

जवाबों:


222

\n मेरे लिए इस तरह काम करता है:

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

87
बस \nअकेले काम करेगा ... \rकुछ भी मत सोचो ।
पीटर अज़ताई

5
\ r \ n यह विंडोज़ के लिए एक लाइन ब्रेक है, और \ n लिनक्स के लिए एक लाइन ब्रेक है
गुइलहर्मे टोरेस कास्त्रो

मेरे लिए यह काम नहीं कर रहा है <TextView android: Layout_width = "50dp" android: layout_height = "70dp" android: layout_weight = "1" android: background = "@ drawable / keypad1" android: गुरुत्वाकर्षण = केंद्र "android: text =" 2 एबीसी "/>
एंड्रॉइडराजी

1
आपके द्वारा किए गए अन्य परिवर्तन का उल्लेख नहीं करने के लिए भ्रामक जो स्ट्रिंग के चारों ओर उद्धरण जोड़ रहा था।
पैट्रिक

2
'\ r' वास्तव में पाठ में 'r' के रूप में दिखता है। इसलिए, जैसा कि दूसरों ने सुझाव दिया है, '\ n' चाल करता है।
मिहा मार्किक

92

ठीक है यह पता लगा:

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

इसलिए सीडीएटीए में लपेटना आवश्यक है और एचटीएमएल टैग के रूप में अंदर टूट जाता है


3
एक स्ट्रिंग संसाधन में यह प्रयोग करें & # xa; जैसे "Hi! First line! & #
Xa

3
इसके लिए उपयोग की आवश्यकता होती है Html.fromHtml(), जो एक साधारण लाइनब्रेक के लिए थोड़ा अधिक है, और अनुवाद प्रदाताओं द्वारा अच्छी तरह से समर्थित नहीं है।
पियरे-ल्यूक पौर

आदमी पर आओ, गंभीरता से? आपको उसके सवाल में समस्या नहीं मिली?
बग्स

68

Android संस्करण 1.6 \ n \ n को नहीं पहचानता है। इसके बजाय, उपयोग करें: System.getProperty ("line.separator")

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

3
वोट दें! यह मेरे लिए काम किया! यदि आप फ़ॉर्म में केवल एक पंक्ति विराम जोड़ना चाहते हैं: textView.setText (string1 + System.getProperty ("line.separator") + string2); तो यह एक इलाज काम करता है, धन्यवाद!
दो बार

WAT? क्या एक Android संस्करण विंडोज चल रहा है?
मातरिनस

3
Xamarin का उपयोग करने वाले किसी के लिए भी यह बराबर है: Java.Lang.JavaSystem.LineSeparator ()
स्टीव

1
सिर्फ़ System.lineSeparator () क्यों नहीं?
जॉर्ज जेड।

60

लाइनब्रेक (\ n) केवल तभी काम करते हैं जब आप अपना स्ट्रिंग संसाधन मान इस तरह उद्धरणों में देते हैं:

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

यदि आप इसे इस तरह उद्धरणों के बिना रखते हैं तो यह लाइनब्रेक नहीं करेगा:

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

हाँ, यह इतना आसान है।


3
मैं सिर्फ यह जोड़ना चाहता हूं कि यह उद्धरण-सामान स्ट्रिंग संसाधनों में विशेष वर्णों के साथ या ग्रीक या रूसी जैसी भाषाओं के साथ भी ठीक काम करता है ... (यदि आपको कोई समस्या आती है)
datayeah

1
धन्यवाद, मुझे लगता है कि उद्धरणों का उपयोग करना लंबी बहु-पंक्ति ग्रंथों के लिए पठनीयता बनाए रखने के लिए एक बेहतर उपाय है <string name="sample_string">"some test line 1 some test line 2 line 3" </string>
xithink

1
उद्धरणों के उपयोग के अन्य दुष्प्रभाव हैं, जैसे रिक्त स्थान को हमेशा महत्वपूर्ण बनाना (बिना उद्धरण के, एक पंक्ति में कई स्थान, जैसे कि इंडेंट में, ढह जाते हैं)।
पियरे-ल्यूक पौर

33

उपरोक्त सभी की कोशिश की, क्या मेरे खुद के कुछ शोध के परिणामस्वरूप निम्नलिखित समाधान के लिए लाइनफीड एस्केप एस्केप चार्ट का प्रतिपादन किया गया:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. का उपयोग करते हुए विधि की जगह आप फिल्टर करने की जरूरत है बच गए linefeeds (जैसे '\\ एन')

  2. इसके बाद ही लाइन फ़ॉर '\ n' एस्केप चर के प्रत्येक उदाहरण को वास्तविक लाइनफ़ीड में प्रस्तुत किया जाता है

इस उदाहरण के लिए मैंने JSON स्वरूपित डेटा के साथ Google Apps Scripting noSQL डेटाबेस (ScriptDb) का उपयोग किया।

चीयर्स: डी


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

18

इसने मेरे लिए काम किया

android:text="First \n Second"

2
आपका उदाहरण ऐसा लगता है जैसे इसमें एक लेआउट संसाधन में पाठ शामिल है, जो एक बड़ा नो-नो (स्थानीयकरण करने में असंभव) है।
पियरे-ल्यूक पौर

17

इसके चारों ओर दो रास्ते हैं। यदि आप अपने स्ट्रिंग को कच्चे स्ट्रिंग के रूप में उपयोग करते हैं, तो आपको न्यूलाइन वर्ण का उपयोग करने की आवश्यकता है। यदि आप इसे html के रूप में उपयोग करते हैं, जैसे कि इसे पार्स करके Html.fromString, दूसरा संस्करण बेहतर है।

1) न्यूलाइन चरित्र \n

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

2) एचटीएमएल न्यूलाइन टैग <br>या<br />

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

6
मैंने इसे डाउनवोट नहीं किया, लेकिन मुझे लगता है कि आपका कोड गलत है, आपको "<br>" के बजाय "& lt; br>" की आवश्यकता है क्योंकि यह काम नहीं करेगा क्योंकि <एक आरक्षित प्रतीक है।
JPM

<br>, <u>, <b>और <i>टैग भागने के बिना स्ट्रिंग संसाधनों में अनुमति दी जाती है, और सही ढंग से लागू किए जाते हैं TextView.setText(resId)Context.getString(resId)जब तक किसी CDATAअनुभाग में लपेटा नहीं जाता है, तब तक उनका उपयोग नहीं किया जाता है ।
पियरे-ल्यूक पौर

16

यह मेरे लिए काम करता है, शायद किसी को यह उपयोगी पता चलेगा:

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

11

यदि आप XML का उपयोग कर रहे हैं तो अपने TextView उपयोग android:singleLine = "false"या जावा में घोषित करें , का उपयोग करेंtxtSubTitle.setSingleLine(false);


ऐसा नहीं है कि काम नहीं किया। क्या इसका Html.fromHtml () और स्ट्रिंग संसाधनों से कोई लेना देना है?
dropOfJupiter

@dropsOfJupiter: क्या आपने देखा है कि Html.fromHtml () कॉल क्या है? मैं इसे एक स्ट्रिंग को सौंपने और डीबगर में देखने के लिए उत्सुक हूं।
स्लंड

10

एंड्रॉइड स्टूडियो 0.8.9 का इस्तेमाल किया। मेरे लिए काम करने का एकमात्र तरीका है \n। CDATA है और न ही साथ न तो रैपिंग <br>या <br />काम किया।



8

बहुत आसान: "\ n" का उपयोग करें

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

\ n ASCII char 0xA से मेल खाती है, जो 'LF' या लाइन फीड है

\ r ASCII char 0xD से मेल खाता है, जो 'CR' या कैरिज रिटर्न है

यह पहले टाइपराइटरों से वापस आता है, जहाँ आप केवल एक लाइन फीड (और एक लाइन लो टाइप टाइप), या एक लाइन फीड + कैरिज रिटर्न (जो एक लाइन की शुरुआत में भी चलती है) करने के लिए चुन सकते हैं

एंड्रॉइड / जावा पर \ n एक गाड़ी वापसी + लाइन फीड से मेल खाती है, जैसा कि आप अन्यथा उसी लाइन को 'अधिलेखित' करेंगे


6

अपने स्थानीयकरणों को दोबारा जांचने का प्रयास करें। संभव है, आप एक फ़ाइल (स्थानीयकरण) को संपादित करने की कोशिश कर रहे हैं, लेकिन वास्तव में मेरे मामले में दूसरे की तरह प्रोग्राम का उपयोग कर रहे हैं । डिफ़ॉल्ट सिस्टम भाषा रूसी है, जबकि मैं अंग्रेजी स्थानीयकरण को संपादित करने की कोशिश कर रहा हूं।

मेरे मामले में, लाइन सेपरेटर के रूप में "\ n" का उपयोग करने के लिए कार्यशील समाधान है:

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

4

इसके अलावा आप "&lt;br&#47;&gt;"\ n के बजाय जोड़ सकते हैं ।

यह HTML <br/> के लिए कोड से बच गया है

और फिर आप टेक्स्ट को टेक्स व्यू में जोड़ सकते हैं:

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

nea, ऐसा नहीं लगता। एंड्रॉइड वास्तव में उस बकवास को प्रिंट करेगा। मैंने कोशिश की। यह HTML में अच्छी तरह से काम करता है, लेकिन यहाँ नहीं, खासकर जब आप Html.fromHTML ("xml फ़ाइल से मेरा स्ट्रिंग") कर रहे हैं
dropsOfJupiter

@ पृष्ठभूमि - भूल न जाना ==> Html.fromHtml(textForTextView).toString()--- और फिर आप कर सकते हैं: articleTextView.setText(Html.fromHtml("text before break<br/>text after break").toString());-------- दूसरे शब्दों में <br/>सीधे सीधे अंदर उपयोग करेंfromHtml()
पीटर अज़ताई

&lt;br/>यह सुनिश्चित करने के लिए पर्याप्त होना चाहिए कि शैली की जानकारी न छीनी जाए। (आधिकारिक दस्तावेज पर आधारित)
jpmcosta

3

आप एंड्रॉइड स्टूडियो के स्ट्रिंग-एडिटर का भी उपयोग कर सकते हैं, यह स्वचालित रूप से लाइन ब्रेक और सामान की तरह उत्पन्न करता है ...


2

Html.fromHtmlपदावनत के रूप में, मैंने बस अगली पंक्ति में स्ट्रिंग 2 प्राप्त करने के लिए इस कोड का उपयोग किया।

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

इसका सबसे आसान तरीका मूल्यों (स्ट्रिंग्स) में जाना है (आपके संसाधन फ़ोल्डर में)

वहाँ एक स्ट्रिंग घोषित करें:

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

और अपनी विशिष्ट xml फ़ाइल में जैसे स्ट्रिंग कहते हैं

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

1

मुझे एक और विधि मिली: " android: maxWidth =" 40dp " " विशेषता जोड़ना आवश्यक है । बेशक, यह पूरी तरह से काम नहीं कर सकता है, लेकिन यह एक लाइन ब्रेक देता है।


1

\ n मेरे लिए काम नहीं कर रहा था। मैं xml को टेक्स्ट में बदलकर और नीचे दिए गए टेक्स्टव्यू टेक्स्ट प्रॉपर्टी का निर्माण करके समस्या को ठीक करने में सक्षम था।

android:text="Line 1
Line 2
Line 3

DoubleSpace"

उम्मीद है कि यह उन लोगों की मदद करता है जिन्होंने कहा है कि उनके लिए काम नहीं किया।


मुझे यकीन नहीं है कि यह एक अच्छा समाधान है। वहां सिर्फ छिपे हुए \nपात्र हैं।
अल्मो

1

मैं एक फ़ाइल से अपना पाठ पढ़ रहा हूं, इसलिए मैंने थोड़ा अलग तरीका अपनाया, क्योंकि फ़ाइल में \ n जोड़ने के परिणामस्वरूप पाठ में \ n प्रदर्शित हुआ।

    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

हो सकता है कि आप पाठ में lf डालने में सक्षम हों , लेकिन यह प्रदर्शित नहीं होता है? सुनिश्चित करें कि आपके पास नियंत्रण के लिए पर्याप्त ऊंचाई है। उदाहरण के लिए:

सही बात:

android:layout_height="wrap_content"

गलत हो सकता है:

android:layout_height="10dp"


0

इसे इस्तेमाल करे:

         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

इस तरह से टेक्स्ट ब्रेक का उपयोग करें (\ n):

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

0

मुझे लगता है कि यह कैसे और अधिक अच्छी तरह से काम करता है यह वर्णन करने के लिए एक अधिक पूर्ण उत्तर की आवश्यकता है।

सबसे पहले, यदि आपको उन्नत स्वरूपण की आवश्यकता है, तो स्ट्रिंग संसाधनों में एचटीएमएल का उपयोग करने के तरीके पर मैनुअल की जांच करें ।
तब आप उपयोग कर सकते हैं <br/>, आदि। हालांकि, इसके लिए कोड का उपयोग करके पाठ सेट करना होगा।

यदि यह सिर्फ सादा पाठ है, तो स्थिर स्ट्रिंग संसाधनों में एक नई पंक्ति वर्ण (LF) से बचने के कई तरीके हैं ।

डबल कोट्स में स्ट्रिंग संलग्न करना

सबसे साफ तरीका यह है कि स्ट्रिंग को डबल कोट्स में संलग्न करें।
इससे यह व्हाट्सएप की व्याख्या बिल्कुल वैसी ही हो जाएगी जैसी कि दिखाई देती है, ध्वस्त नहीं।
तो आप बस इस पद्धति में सामान्य रूप से न्यूलाइन का उपयोग कर सकते हैं (इंडेंटेशन का उपयोग न करें)।

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

ध्यान दें कि कुछ पात्रों को इस मोड (जैसे \") में विशेष भागने की आवश्यकता होती है ।

नीचे दिए गए एस्केप सीक्वेंस भी उद्धृत मोड में काम करते हैं।

एक्सएमएल में सिंगल-लाइन का उपयोग करते समय मल्टी-लाइन स्ट्रिंग्स का प्रतिनिधित्व करने के लिए

एक्सएमएल में न्यूलाइन से बचने का सबसे सुरुचिपूर्ण तरीका अपने XML / HTML इकाई &#xA;या का उपयोग करके कोड बिंदु (हेक्स में 10 या 0xA) के साथ है &#10;। यह किसी भी वर्ण से बचने के लिए XML तरीका है
हालाँकि, यह केवल उद्धृत मोड में काम करने लगता है।

एक और तरीका बस उपयोग करने के लिए है \n, हालांकि यह मेरी राय में, (क्योंकि यह एक्सएमएल में एक विशेष भागने का क्रम नहीं है, नकारात्मकता को प्रभावित करता है, एंड्रॉइड स्टूडियो इसे उजागर नहीं करता है)।

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

इनमें से किसी भी पलायन क्रम के बाद एक नई पंक्ति या किसी व्हाट्सएप को शामिल न करें, क्योंकि इसकी व्याख्या अतिरिक्त स्थान के रूप में की जाएगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.