অ্যান্ড্রয়েড টেক্সটভিউতে কীভাবে একটি লাইন ব্রেক যুক্ত করবেন?


157

আমি টেক্সটভিউতে একটি লাইন বিরতি যুক্ত করার চেষ্টা করছি।

আমি প্রস্তাবিত চেষ্টা করেছি \ 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

আমি কিছু অনুপস্থিত করছি?


আপনি কি অ্যান্ড্রয়েড সেট করেছেন: কমপক্ষে 2 এর লাইন?
রবি পন্ড

আমার সাবটাইটেলটি ইতিমধ্যে 6-9 রেখাগুলি উঠবে এবং এটি পাঠ্যটি পরবর্তী লাইনে আবদ্ধ করবে তবে আমি যদি এটি ভাঙতে চাই তবে তা ভাঙবে না।
ড্রপসফিউজপিটার

আপনার সমাধানটি উত্তর হিসাবে পোস্ট করা উচিত এবং এটি গ্রহণ করা উচিত, যাতে লোকেদের উত্সাহ দেওয়া যায়!
বিগস্টোনস

1
লাইনব্রেকগুলি এনকোড করার বিভিন্ন উপায় এবং তাদের পার্শ্ব প্রতিক্রিয়াগুলি চিত্রিত করার জন্য আমি একটি ছোট নমুনা প্রকল্প তৈরি করেছি। স্পিলার: \nপ্রকৃতপক্ষে সেরা উপায়। github.com/paour/ স্ট্রিং রিসোর্স টেস্ট
পিয়েরে-লুক পাওর

কেন এই প্রশ্ন এত ভোট দেওয়া হয়? আপনি কি একেবারে তাকিয়েছিলেন? সমাধানটি খুব সহজ, কেবল সেই Html.fromHtml()ফাংশনটি সরিয়ে ফেলুন এবং সহজভাবে ব্যবহার করুন txtSubTitle.setText(getResources().getString(R.string.sample_string))
বাগগুলি ঘটেছে

উত্তর:


222

\n আমার জন্য এই কাজ করে:

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

87
কেবল \nএকা কাজ করবে ... কিছু করবেন না বলে ভাববেন না \r
পিটার আজতাই

5
windows r \ n এটি উইন্ডোজের জন্য একটি লাইন বিরতি, এবং \ n লিনাক্সের জন্য একটি লাইন বিরতি
গিলহার্ম টরেস কাস্ত্রো

এটি আমার জন্য কাজ করছে না <টেক্সটভিউ অ্যান্ড্রয়েড: লেআউট_উইথ = "50 ডিপি" অ্যান্ড্রয়েড: বিন্যাস_ উচ্চতা = "70 ডিপি" অ্যান্ড্রয়েড: লেআউট_ ওয়েট = "1" অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড = "@ অঙ্কনযোগ্য / কীপ্যাড 1" অ্যান্ড্রয়েড: মাধ্যাকর্ষণ = "কেন্দ্র" অ্যান্ড্রয়েড: পাঠ্য = " 2 এবিসি "/>
অ্যান্ড্রয়েডরাজী

1
আপনার করা অন্য পরিবর্তনগুলি উল্লেখ না করায় বিভ্রান্তিকর, যা স্ট্রিংয়ের চারপাশে উদ্ধৃতি যুক্ত ছিল।
প্যাট্রিক

2
'\ r' আসলে পাঠ্যে 'r' হিসাবে দেখায়। সুতরাং, অন্যরা যেমন পরামর্শ দিয়েছে, '\ n' কৌশলটি করে।
মিহা মার্কিক

92

ঠিক আছে এটি খুঁজে বের করে:

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

সুতরাং সিডিএটিএতে মোড়ানো প্রয়োজন এবং এইচটিএমএল ট্যাগ হিসাবে অন্তর্ভুক্ত বিরতি


3
স্ট্রিং রিসোর্সে এটি ব্যবহার করুন & # xa; "হাই! প্রথম লাইন! & #
Xa

3
এর জন্য এটি ব্যবহার করা দরকার Html.fromHtml()যা একটি সাধারণ লাইনব্রেকের জন্য কিছুটা, এবং অনুবাদ সরবরাহকারীরা ভাল সমর্থন করেন না।
পিয়েরে-লক পাওর

আসো মানুষ, সিরিয়াসলি? আপনি কি তার প্রশ্নে সমস্যাটি খুঁজে পাচ্ছেন না?
বাগগুলি ঘটেছে

68

অ্যান্ড্রয়েড সংস্করণ 1.6 \ r \ n স্বীকৃতি দেয় না। পরিবর্তে, ব্যবহার করুন: System.getProperty ("line.separator")

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

3
ভোট দিন! এটি আমার পক্ষে কাজ করেছিল! আপনি যদি ফর্মটিতে কেবল একটি লাইন বিরতি যুক্ত করতে চান: পাঠ্য ভিউ.সেটটেক্সট (স্ট্রিং 1 + সিস্টেম.জেটপ্রোপার্টি ("লাইন.সেস্পেটর") + স্ট্রিং 2); তাহলে এটি একটি ট্রিট কাজ করে, আপনাকে ধন্যবাদ!
দুবার বৃত্তাকার

WAT? উইন্ডোজ চলমান একটি অ্যান্ড্রয়েড সংস্করণ আছে?
মার্টিনাস

3
যামারিন ব্যবহারকারী যে কোনও ব্যক্তির জন্য এটি সমতুল্য: জাভা.ল্যাং.জ্যাভাসিস্টেম.লাইনসাপারেটর ()
স্টিভ

1
কেন কেবল সিস্টেম.লাইনসাপারেটর () নয়?
জর্জ জেড।

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
আমি কেবল যুক্ত করতে চেয়েছিলাম যে এই উক্তিটি স্ট্রিং সংস্থার বিশেষ অক্ষরগুলির সাথে বা গ্রীক বা রাশিয়ান ভাষাগুলির মতো ভাষাগুলির সাথেও দুর্দান্ত কাজ করে ... (যদি আপনার কোনও সমস্যা দেখা দেয়)
দাতায়াহ

1
ধন্যবাদ, আমি মনে করি দীর্ঘ মাল্টি-লাইনের পাঠ্যগুলির পাঠযোগ্যতা বজায় রাখার জন্য কোটগুলি ব্যবহার করা একটি ভাল সমাধান <string name="sample_string">"some test line 1 some test line 2 line 3" </string>
x:3ink

1
উদ্ধৃতি ব্যবহারের অন্যান্য পার্শ্ব-প্রতিক্রিয়া রয়েছে, যেমন স্পেসগুলি সর্বদা তাৎপর্যপূর্ণ করে তোলা (উদ্ধৃতি ব্যতীত, একাধারে একাধিক স্পেস, যেমন ইনডেন্টে, ধসে যায়)।
পিয়েরে-লুক পাওর

33

উপরের সমস্তগুলি চেষ্টা করে দেখেছি, নিজস্ব কিছু গবেষণা করেছি যার ফলস্বরূপ লাইনফিডের অব্যাহতি অক্ষর রেন্ডারিংয়ের জন্য নিম্নলিখিত সমাধানের ফলস্বরূপ:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. ব্যবহার পদ্ধতি প্রতিস্থাপন আপনি ফিল্টার প্রয়োজন পলান linefeeds (যথা, '\\ এন')

  2. তারপরেই লাইন ফিডের প্রতিটি উদাহরণ 'escape n' এড়িয়ে চলার অক্ষর প্রকৃত লাইনফিডে রেন্ডার হয়ে যায়

এই উদাহরণের জন্য আমি JSON ফর্ম্যাট ডেটা সহ একটি Google অ্যাপ্লিকেশন স্ক্রিপ্টিং নোএসকিউএল ডাটাবেস (স্ক্রিপ্টডিবি) ব্যবহার করেছি।

চিয়ার্স: ডি


পাঠ্য.প্লেস ("\\ n", System.getProperty ("line.separator"))
মুসা

18

এটি আমার পক্ষে কাজ করেছে

android:text="First \n Second"

2
আপনার উদাহরণ দেখে মনে হচ্ছে এতে লেআউট রিসোর্সে পাঠ্য অন্তর্ভুক্ত রয়েছে, এটি একটি বড় নম্বর (স্থানীয়করণ অসম্ভব)।
পিয়েরে-লুক পাওর

17

এটি প্রায় দুটি উপায় আছে। যদি আপনি আপনার স্ট্রিংটিকে কাঁচা স্ট্রিং হিসাবে ব্যবহার করেন তবে আপনাকে নতুন লাইন অক্ষরটি ব্যবহার করতে হবে। আপনি যদি এটি এইচটিএমএল হিসাবে ব্যবহার করেন, উদাহরণস্বরূপ এটিকে পার্স করে 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
আমি এটি ডাউনভিট করি নি তবে আমি মনে করি যে আপনার কোডটি ভুল বলে মনে হচ্ছে আপনার "" & lt; br> "এর পরিবর্তে" <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

আপনি যদি আপনার টেক্সটভিউ ব্যবহার android:singleLine = "false"বা জাভাতে এক্সএমএল ব্যবহার করেন তবে ব্যবহার করুনtxtSubTitle.setSingleLine(false);


না যে কাজ করে না। Html.fromHtml () এবং স্ট্রিং সংস্থানগুলির সাথে এর কোনও যোগসূত্র আছে?
ড্রপসফিউজপিটার

@ড্রপসফিউজপিটার: আপনি কি এইচটিএমএল.ফর্মএইচটিএমএল () কলটি ফিরছে তা দেখেছেন? আমি এটি একটি স্ট্রিংকে নির্ধারিত করতে এবং এটি ডিবাগারে দেখতে আগ্রহী be
20:30 এ স্লান

10

অ্যান্ড্রয়েড স্টুডিও 0.8.9 ব্যবহৃত হয়েছে। আমার পক্ষে কাজ করা একমাত্র উপায় \n। সিডিএটিএর সাথে মোড়ানো নয় <br>বা <br />কাজ করাও নয় ।



8

খুব সহজ: "\ n" ব্যবহার করুন

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

। n ASCII চর 0xA এর সাথে সম্পর্কিত, যা 'এলএফ' বা লাইন ফিড

r ASCII চর 0xD এর সাথে মিলে যায়, যা 'সিআর' বা ক্যারেজ রিটার্ন

এটি ঠিক প্রথম টাইপরাইটারদের থেকে এসেছে, যেখানে আপনি কেবল একটি লাইন ফিড (এবং কেবল একটি লাইন নীচে টাইপ করুন) বা একটি লাইন ফিড + ক্যারেজ রিটার্ন (যা একটি লাইনের শুরুতেও সরে যায়) বেছে নিতে পারেন

অ্যান্ড্রয়েড / জাভাতে \ n একটি ক্যারেজ রিটার্ন + লাইন ফিডের সাথে মিলে যায়, কারণ আপনি অন্যথায় একই লাইনে 'ওভাররাইট' করতে চান


6

আপনার স্থানীয়করণ দুটিবার পরীক্ষা করার চেষ্টা করুন। সম্ভব, আপনি একটি ফাইল সম্পাদনা করার চেষ্টা করছেন (স্থানীয়করণ), কিন্তু আসলে আমার ক্ষেত্রে যেমন অন্যটি ব্যবহার করে প্রোগ্রাম করে । আমি ইংরেজী স্থানীয়করণ সম্পাদনা করার চেষ্টা করার সময় ডিফল্ট সিস্টেমের ভাষাটি রাশিয়ান।

আমার ক্ষেত্রে, কাজের সমাধানটি হ'ল লাইন বিভাজক হিসাবে "\ n" ব্যবহার করা:

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

4

এছাড়াও আপনি "&lt;br&#47;&gt;"instead n এর পরিবর্তে যুক্ত করতে পারেন ।

এটি এইচটিএমএল এর জন্য পালানো কোড রয়েছে <br/>

এবং তারপরে আপনি টেক্সটভিউতে পাঠ্য যুক্ত করতে পারেন:

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

নীয়া, তাই মনে হয় না। অ্যান্ড্রয়েড আসলে সেই ননসেন্সটি প্রিন্ট করবে। আমি চেষ্টা করেছিলাম. এটি এইচটিএমএলে ভাল কাজ করে তবে এখানে নয়, বিশেষত আপনি যখন এইচটিএমএল.ফর্ম এইচটিএমএল করছেন ("এক্সএমএল ফাইল থেকে আমার স্ট্রিং")
ড্রপঅফজুপিটার

@ ড্রপস - স্ট্রিংকে ভুলে যাবেন না ==> Html.fromHtml(textForTextView).toString()--- এবং তারপরে আপনি এটি করতে পারেন: articleTextView.setText(Html.fromHtml("text before break<br/>text after break").toString());-------- অন্য কথায় কেবল <br/>সরাসরি ভিতরে ব্যবহার করুনfromHtml()
পিটার আজতাই

&lt;br/>শৈলীর তথ্য ছিনিয়ে নেওয়া হয়নি তা নিশ্চিত করার জন্য পর্যাপ্ত হওয়া উচিত। (অফিশিয়াল ডকুমেন্টেশনের উপর ভিত্তি করে)
জেএমপিস্ট

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>

এবং আপনার নির্দিষ্ট এক্সএমএল ফাইলে কেবল স্ট্রিংকে কল করুন

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

1

আমি অন্য পদ্ধতিটি পেয়েছি: " অ্যান্ড্রয়েড: ম্যাক্সউইথ =" 40 ডিপি " " গুণাবলী যুক্ত করার জন্য প্রয়োজনীয়। অবশ্যই, এটি নিখুঁতভাবে কাজ না করে তবে এটি একটি লাইন ব্রেক দেয়।


1

। n আমার পক্ষে কাজ করছিল না। আমি নীচের মতো টেক্সটভিউ টেক্সট সম্পত্তিটি এক্সএমএল পরিবর্তন করে এবং সমস্যার সমাধান করতে সক্ষম হয়েছি।

android:text="Line 1
Line 2
Line 3

DoubleSpace"

আশা করি এটি তাদের পক্ষে সহায়তা করে যাঁরা বলেছেন যে \ n তাদের পক্ষে কাজ করেনি।


আমি বিশ্বাস করি না এটি একটি ভাল সমাধান। সেখানে কেবল লুকানো \nচরিত্র রয়েছে।
অলমো

1

আমি একটি ফাইল থেকে আমার পাঠ্য পড়ছি, তাই আমি কিছুটা ভিন্ন পদ্ধতির গ্রহণ করেছি , যেহেতু to n ফাইলটিতে যুক্ত করার ফলে text 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/>ইত্যাদি ব্যবহার করতে পারেন তবে যাইহোক, এর জন্য কোড ব্যবহার করে পাঠ্য নির্ধারণ করা দরকার।

যদি এটি কেবল সরল পাঠ্য হয় তবে স্ট্যাটিক স্ট্রিংয়ের সংস্থানগুলিতে একটি নতুন লাইন চরিত্র (এলএফ) এড়ানোর অনেক উপায় রয়েছে ।

ডাবল উদ্ধৃতিতে স্ট্রিংটি বন্ধ করা হচ্ছে

সবচেয়ে পরিষ্কার উপায় হ'ল ডাবল উদ্ধৃতিতে স্ট্রিংটি আবদ্ধ করা।
এটি এটি এতক্ষণে সাদা স্থান স্পষ্ট করে ব্যাখ্যা করবে যেমন এটি প্রদর্শিত হবে, ধসে পড়ে না।
তারপরে আপনি এই পদ্ধতিতে সাধারণভাবে নিউলাইন ব্যবহার করতে পারেন (ইনডেন্টেশন ব্যবহার করবেন না)।

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

নোট করুন যে কয়েকটি অক্ষরের জন্য এই মোডে বিশেষভাবে পালানোর প্রয়োজন হয় (যেমন \")।

নীচে পালানোর ক্রমগুলি উদ্ধৃত মোডেও কাজ করে।

এক্সএমএলে একক-লাইনটি মাল্টি-লাইন স্ট্রিংগুলি উপস্থাপন করার জন্য

এক্সএমএলে নতুন লাইনটি এড়ানোর সর্বাধিক মার্জিত উপায় হল এর কোড পয়েন্ট (হেক্সে 10 বা 0xA) এর এক্সএমএল / এইচটিএমএল সত্তা ব্যবহার করে &#xA;বা &#10;। এটি কোনও অক্ষর থেকে বাঁচার জন্য এক্সএমএল উপায়
তবে এটি কেবল উদ্ধৃত মোডে কাজ করবে বলে মনে হচ্ছে।

অন্য একটি পদ্ধতি হ'ল সহজভাবে ব্যবহার করা \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>

এই পালানোর ক্রমগুলির পরে কোনও নিউলাইন বা কোনও শ্বেত স্পেস অন্তর্ভুক্ত করবেন না, যেহেতু এটি অতিরিক্ত স্থান হিসাবে ব্যাখ্যা করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.