টেক্সটভিউয়ের ভিতরে একাধিক শৈলী থাকা কি সম্ভব?


547

টেক্সটভিউয়ের ভিতরে বিভিন্ন টুকরো টেক্সটের জন্য একাধিক শৈলী সেট করা সম্ভব?

উদাহরণস্বরূপ, আমি নীচে পাঠ্য সেট করছি:

tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);

প্রতিটি পাঠ্য উপাদানের জন্য আলাদা স্টাইল থাকা কি সম্ভব? উদাহরণস্বরূপ, লাইন 1 গা bold়, শব্দ 1 তির্যক ইত্যাদি

বিকাশকারী গাইডের সাধারণ কাজগুলি এবং অ্যান্ড্রয়েডে তাদের কীভাবে করবেন সেগুলির মধ্যে পাঠ্যের নির্বাচন বাছাই, হাইলাইটিং বা স্টাইলিং অংশ অন্তর্ভুক্ত রয়েছে :

// Get our EditText object.
EditText vw = (EditText)findViewById(R.id.text);

// Set the EditText's text.
vw.setText("Italic, highlighted, bold.");

// If this were just a TextView, we could do:
// vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
// to force it to use Spannable storage so styles can be attached.
// Or we could specify that in the XML.

// Get the EditText's internal text storage
Spannable str = vw.getText();

// Create our span sections, and assign a format to each.
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

তবে এটি পাঠ্যের অভ্যন্তরে সুস্পষ্ট অবস্থান নম্বর ব্যবহার করে। এটি করার একটি পরিষ্কার উপায় আছে?


6
যদি টেক্সটভিউ স্ট্রিংটি স্থিতিশীল থাকে তবে আপনি কেবল স্ট্রিং রিসোর্স ফাইলে এইচটিএমএল <b>, <i>, এবং <u> ট্যাগ যুক্ত করতে পারেন এবং সেগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে। উদাহরণস্বরূপ <টেক্সটভিউ অ্যান্ড্রয়েড: টেক্সট = "@ স্ট্রিং / টেস্ট" /> যেখানে @ স্ট্রিং / পরীক্ষা <string> <b>
গা bold়

2
+1 @ গ্রেগ 7gkb! মূল শব্দটি 'স্থির'। আমার কিছু স্ট্রিং <b> এর সাথে কেন কাজ করেছে এবং কিছু কিছু করেননি তা ভেবে আমি আমার চুলগুলি টানছিলাম। যেগুলির মধ্যে ভেরিয়েবল ছিল না।
স্কট বিগস

উত্তর:


694

যদি কেউ এটি কীভাবে করবেন তা ভাবছেন, এখানে এক উপায়: (আবারও মার্ককে ধন্যবাদ!)

mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" +  "<br />" + 
            "<small>" + description + "</small>" + "<br />" + 
            "<small>" + DateAdded + "</small>"));

এই পদ্ধতিতে সমর্থিত ট্যাগগুলির একটি অনানুষ্ঠানিক তালিকার জন্য, এই লিঙ্কটি বা এই প্রশ্নটি দেখুন: কোন HTML ট্যাগগুলি অ্যান্ড্রয়েড টেক্সটভিউ দ্বারা সমর্থিত?


1
@ JānisGruzis: এই কাজ করার সম্ভবত একটি উপায় অসম্পূর্ণ পদ্ধতি, বলে মাধ্যমে হয়, formatTextWhite(string text)যে শুধু নিম্নলিখিত বিন্যাসে স্ট্রিং মধ্যে টেক্সট সন্নিবেশ: "<font size="..." color="..." face="...">%s</font>"
কিংবদন্তি

@ লিজেন্ড আমি <font fgcolor = '# ffff5400'> <b> <big> "+" শিরোনাম "+" </ বিগ> </ b> </font> ব্যবহার করেছি তবে fgcolor / রঙ (উভয় চেষ্টা করা) নয় কাজ করছে ... আপনি কীভাবে এইচটিএমএল ব্যবহার করে রঙিন জিনিসটি করতে জানেন
মুহাম্মদ বাবর

@MuhammadBabar: যদি আপনি এই চেষ্টা করতে পারেন: Html.fromHtml("<![CDATA[<font color='#ffff5400'>the html content you already have</font>]]>");? আমি মনে করি এটি আমার জন্য একদা ফিরে এসেছিল। এটি এখনও কাজ করে কিনা তা নিশ্চিত নয়।
কিংবদন্তি

1
@ কিংবদন্তি ধন্যবাদ তবে এটিকে পালনের Html.fromHtml("<font color=\"#999999\">জন্য আমার পক্ষে কাজ করার একটি উপায় খুঁজে পেয়েছিল :) ...
মুহাম্মদ বাবর

2
কেন এটি mBox..setText(Html.fromHtml("<b>" + name + "</b>") + doNotApplyHTML);কোনও ধারণার জন্য কাজ করে না ধন্যবাদ
শান জিশি

216

চেষ্টা করুন Html.fromHtml()এবং আপনার পাঠ্যকে গা bold় এবং ইটালিক এইচটিএমএল ট্যাগের সাহায্যে চিহ্নিত করুন যেমন:

Spanned text = Html.fromHtml("This mixes <b>bold</b> and <i>italic</i> stuff");
textView.setText(text);

1
আসলে এটি আমাকে অন্য প্রশ্নের কাছে নিয়ে আসে: এইচটিএমএল পাঠ্যের সাথে একটি টেক্সটভিউ এর মধ্যে থাকা বা এইচটিএমএল ক্লাসটি ব্যবহার না করেই বিভিন্ন মার্কআপ সেটআপের সাথে তিনটি পাঠ্য দর্শন থাকা কি ভাল? আমি এটির স্পষ্টত প্রথমটি ধরে নিচ্ছি তবে কেবল এটি নিশ্চিত করতে চেয়েছিলাম ...
কিংবদন্তি

2
এইচটিএমএল.ফ্রমএইচটিএমএল () যে ট্যাগগুলির পুরো রোস্টার সমর্থন করে তা আমার কোনও ধারণা নেই - আপনার উত্স কোডটি দেখার প্রয়োজন। ইনলাইন মার্কআপ এবং একাধিক টেক্সটভিউ উইজেটগুলি অर्थোগোনিক সিদ্ধান্ত হওয়া উচিত। আপনার যদি পাঠ্যের বিট বিটগুলির সঠিক স্থান নির্ধারণের প্রয়োজন হয় তবে একাধিক উইজেট ব্যবহার করুন। আপনার, যদি কোনও উইজেটে মার্কআপ ইনলাইন প্রয়োজন হয় তবে ইনলাইন মার্কআপ ব্যবহার করুন। মনে রাখবেন: অ্যান্ড্রয়েডে কোনও ফ্লোএলআউট নেই, সুতরাং অনুচ্ছেদ তৈরির জন্য একাধিক পাঠ্য ভিউগুলিকে একত্রিত করা সত্যিকার অর্থে ব্যবহারিক নয় AI
কমন্সওয়েরে

1
তার জন্য ধন্যবাদ ... আসলে, <small> ট্যাগটি কাজ করেছে ... সুতরাং আমি এটিকে সহজ রাখব এবং কেবল এটি ব্যবহার করব ...
কিংবদন্তি

1
@ টিমবোল্যান্ড: আপনি আপনার স্প্যানগুলি দিয়ে ফেলে দিচ্ছেন monthText + " " + month.getYearLabel()। দেখুন StringUtils.concat()
CommonsWare

2
@ টিমবোল্যান্ড: আপনি একসাথে এটি করতে পারেন:, monthYearLabel.setText(Html.fromHtml("<b>"+month.getMonthLabel().toUpperCase()+"</b>&nbsp;"+month.getYearLabel()))যদি আপনার পৃথক টুকরা প্রয়োজন না হয়।
CommonsWare

191

সামান্য পরিমাণে অফ-টপিক, তবে আমি এখানে উল্লেখ না করার জন্য এটি খুব দরকারী।

আমরা যদি স্ট্রিং.এক্সএমএল রিসোর্স থেকে এইচটিএমএল পাঠ্যটি পড়তে এবং এভাবে স্থানীয়করণকে সহজ করে তুলতে চাই তবে কী হয়। সিডিএটিএ এটি সম্ভব করে তোলে:

<string name="my_text">
  <![CDATA[
    <b>Autor:</b> Mr Nice Guy<br/>
    <b>Contact:</b> myemail@grail.com<br/>
    <i>Copyright © 2011-2012 Intergalactic Spacebar Confederation </i>
  ]]>
</string> 

আমাদের জাভা কোড থেকে আমরা এখন এটি এর মতো ব্যবহার করতে পারি:

TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setText(Html.fromHtml(getString(R.string.my_text))); 

আমি এটি কাজ করবে আশা করি না। কিন্তু এটা করেছে।

আশা করি এটি আপনার কারও কারও পক্ষে উপকারী!


2
সাধারণত "মিথ্যা" বলতে বোঝায় যে আপনি অনুসন্ধানের টেবিলে একটি অদ্ভুত মান অ্যাক্সেস করেছেন। আমি যখন পেয়েছিলাম তখন আমার কাছে আর.আইড.ওক এবং আর স্টারিং.ওক ছিল এবং ঘটনাক্রমে সঠিক গেটস্ট্রিং (আর। স্ট্রিং.ক) এর পরিবর্তে গেটস্ট্রিং (আর.আইড.ওক) ব্যবহার করেছি
জো প্লান্ট

এটি কি কোনও লেআউট-এক্সএমএল-তে কাজ করে? আমি যখন সেখানে স্ট্রিং "@string/someText"রিসোর্সটি উল্লেখ করি (যেখানে "সামারটেক্সট" একটি স্ট্রিং.এক্সএমএল সংজ্ঞায়িত একটি উত্স), আমি কেবল সমস্ত পাঠ্য টেক্সট হিসাবে টেক্সট হিসাবে স্ট্রিংটি পাই।
জি.ই.

3
আমি এটি সেরা উত্তর খুঁজে পেয়েছি। আমাকে অনুপ্রাণিত. সাহায্য করতে পারলাম না তবে আমার দু' সেন্টেরও মূল্য দিতে হবে। সমাধান এখানে gist.github.com/aegis1980/b138dcb2fd1b2e98aa30 আপনাকে লেআউট ফাইলে বরাদ্দ করতে দেয় যাতে আপনার পাঠ্য সংস্থান প্রোগ্রামক্রমে নির্ধারিত করতে হবে না (এবং অ্যান্ড্রয়েড স্টুডিওতে পূর্বরূপ দেখতে পারেন!)
জন

126

আপনি যদি এইচটিএমএল ব্যবহার করার মতো মনে না করেন তবে আপনি কেবল একটি স্টাইলস.এক্সএমএল তৈরি করতে এবং এটি এটি ব্যবহার করতে পারেন:

TextView tv = (TextView) findViewById(R.id.textview);
SpannableString text = new SpannableString(myString);

text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.setText(text, TextView.BufferType.SPANNABLE);

আপনি সম্ভবত কাজ করছেন এমন একটি সাধারণ অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে এটিকে অনুলিপি করুন / আটকান। আপনি দেখতে পাবেন যে একক পাঠ্যদর্শনটিতে দুটি স্টাইল প্রয়োগ করা হবে।
কেন্ট অ্যান্ডারসন

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

আপনি সঠিক. আপনি যদি একাধিক ভাষাকে সমর্থন করে থাকেন তবে আপনি যে পথটি নিতে চান তা এই পথ নয় would আপনি যদি নিশ্চিত না হন তবে স্ট্রিং মাপ পরিবর্তন করবে না ... যেমন অ্যাপ্লিকেশন নামের উদাহরণস্বরূপ।
ক্যান্ট অ্যান্ডারসন

9
আমি দেখতে পাচ্ছি না কেন l10n এই সমাধানটি দিয়ে কাজ করতে পারে না। কেবল একটির পরিবর্তে পৃথক স্ট্রিং পান: স্ট্রিং ফার্স্ট পার্ট = গেটস্ট্রিং (আর। স্ট্রিং.লাইন 1); স্ট্রিং সেকেন্ড পার্ট = গেটস্ট্রিং (আর। স্ট্রিং.লাইন 2); স্প্যানিয়েবল টেক্সট = নতুন স্প্যানিয়েবল স্ট্রিং (ফার্স্ট পার্ট + সেকেন্ড পার্ট); টেক্সট.সেটস্প্যান (নতুন ফোরগ্রাউন্ড কালারস্প্যান (কালার.পর্সকলার (TEXT_COLOR_FOR_FIRST_PART)), 0, ফার্স্ট পার্ট.লাইনেথ (), স্প্যানিয়েবল SPAN 3.0_EXCLUSIVE_EXCLUSIVE); myTextView.setText (পাঠ্য, পাঠ্য ভিউ.বাফারটাইপ। 3.0 ন্যাবল);
রুই 18

5
@ রুই, কারণ l10n অবস্থানগতও। আপনি একটি বাক্যাংশে শব্দের অবস্থানকে হার্ডকোড করতে পারবেন না এবং এখনও l10n হতে পারবেন না। এজন্য আপনি $1%s is a happy $2%sস্ট্রিং বান্ডিলের মতো জিনিস দেখতে পান । আপনাকে টোকেনগুলি পুনরায় সাজানোর অনুমতি দিতে হবে।
জেফ্রি ব্লাটম্যান

60

SpannableStringএইচটিএমএল মার্কআপের পরিবর্তে এটি ব্যবহার করা আরও হালকা ওজন । এটি আমাকে ভিজ্যুয়াল উদাহরণগুলি দেখতে সহায়তা করে তাই এখানে পরিপূরক উত্তর রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

এটি একক TextView

// set the text
SpannableString s1 = new SpannableString("bold\n");
SpannableString s2 = new SpannableString("italic\n");
SpannableString s3 = new SpannableString("foreground color\n");
SpannableString s4 = new SpannableString("background color\n");
SpannableString s5 = new SpannableString("underline\n");
SpannableString s6 = new SpannableString("strikethrough\n");
SpannableString s7 = new SpannableString("bigger\n");
SpannableString s8 = new SpannableString("smaller\n");
SpannableString s9 = new SpannableString("font\n");
SpannableString s10 = new SpannableString("URL span\n");
SpannableString s11 = new SpannableString("clickable span\n");
SpannableString s12 = new SpannableString("overlapping spans\n");

// set the style
int flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
s1.setSpan(new StyleSpan(Typeface.BOLD), 0, s1.length(), flag);
s2.setSpan(new StyleSpan(Typeface.ITALIC), 0, s2.length(), flag);
s3.setSpan(new ForegroundColorSpan(Color.RED), 0, s3.length(), flag);
s4.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, s4.length(), flag);
s5.setSpan(new UnderlineSpan(), 0, s5.length(), flag);
s6.setSpan(new StrikethroughSpan(), 0, s6.length(), flag);
s7.setSpan(new RelativeSizeSpan(2), 0, s7.length(), flag);
s8.setSpan(new RelativeSizeSpan(0.5f), 0, s8.length(), flag);
s9.setSpan(new TypefaceSpan("monospace"), 0, s9.length(), flag);
s10.setSpan(new URLSpan("https://developer.android.com"), 0, s10.length(), flag);
s11.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Toast.makeText(getApplicationContext(), "Span clicked", Toast.LENGTH_SHORT).show();
    }
}, 0, s11.length(), flag);
s12.setSpan(new ForegroundColorSpan(Color.RED), 0, 11, flag);
s12.setSpan(new BackgroundColorSpan(Color.YELLOW), 4, s12.length(), flag);
s12.setSpan(new UnderlineSpan(), 4, 11, flag);

// build the string
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(s1);
builder.append(s2);
builder.append(s3);
builder.append(s4);
builder.append(s5);
builder.append(s6);
builder.append(s7);
builder.append(s8);
builder.append(s9);
builder.append(s10);
builder.append(s11);
builder.append(s12);

// set the text view with the styled text
textView.setText(builder);
// enables clicking on spans for clickable span and url span
textView.setMovementMethod(LinkMovementMethod.getInstance());

আরও অধ্যয়ন

এই উদাহরণটি মূলত এখান থেকে অনুপ্রাণিত হয়েছিল ।


5
আপনার পোস্ট স্প্যানিয়েবল স্ট্রিং সম্পর্কে গুগল ডকুমেন্টেশনের চেয়ে ভাল .. আপনাকে ধন্যবাদ
এমবিএইচ

এটি কি ওয়েব চিত্র থেকে প্রাপ্ত চিত্রগুলিকে সমর্থন করে? আমার প্রয়োজন যেমন।
মোহনরাজ এস

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

@ সুরাগ তাত্ক্ষণিক প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ জানায়, তবে আমার পাশের প্রয়োজনটি জেপিজি, পিএনজি। কেবল ওয়েব ভিউ হ্যান্ডেল করার পছন্দ? :(
মোহনরাজ এস

43

সমর্থিত ট্যাগগুলির তালিকাটি হ'ল:

আপনি যদি স্ট্রিং রিসোর্স ব্যবহার করেন তবে আপনি কিছু সাধারণ স্টাইলিং যুক্ত করতে পারেন, যেমন এইচটিএমএল নোটেশন ব্যবহার করে গা bold় বা তির্যক। বর্তমানে সমর্থিত ট্যাগ নেই: B(গাঢ়), I(ইটালিক), U(নিম্নরেখা), TT(মোনোস্পেস), BIG, SMALL, SUP(সুপারস্ক্রিপ্ট), SUB(সাবস্ক্রিপ্ট), এবং STRIKE(স্ট্রাইকথ্রু)। সুতরাং, উদাহরণস্বরূপ, res/values/strings.xmlআপনি এটি ঘোষণা করতে পারেন:

<resource>
    <string id="@+id/styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>

( Http://developer.android.com/guide/faq/commontasks.html#selectingtext থেকে - ওয়েব সংরক্ষণাগার লিঙ্ক,<resource> টাইপটি মূলত!)

এটি এটি দেখায় যে Html.fromHtmlসাধারণ ক্ষেত্রে সত্যই প্রয়োজন হয় না।


Html.fromHtml প্রায়শই স্টাইল পাঠ্যের একটি সহজ উপায়। এছাড়াও, এই লিঙ্কটি ইতিমধ্যে মূল প্রশ্নে রয়েছে।
সূচনা

17

আমিও একই সমস্যায় পড়ছিলাম। আমি এইচটিএমএল থেকে ব্যবহার করতে পারি, তবে আমি এখন ওয়েব নই, তবে আমি এটিকে চেষ্টা করার সিদ্ধান্ত নিয়েছি। আমি যদিও এটি স্থানীয়করণ করতে হবে তাই আমি স্ট্রিং প্রতিস্থাপন ধারণা ব্যবহার করে এটি একটি শট দিয়েছি। আমি স্টাইলটি টেক্সটভিউতে মূল স্টাইল হিসাবে সেট করেছি, তারপরে কেবল অন্য পিসগুলি বিন্যাস করুন।

আমি আশা করি এটি অন্যকেও একই কাজ করতে সহায়তা করবে - কাঠামোর ক্ষেত্রে কেন এটি সহজ নয় জানি না।

আমার স্ট্রিংগুলি দেখতে দেখতে:


<string name="my_text">{0} You will need a {1} to complete this assembly</string>
<string name="text_sub0">1:</string>
<string name="text_sub1">screwdriver, hammer, and measuring tape</string>

শৈলী এখানে:


<style name="MainStyle">
    <item name="android:textSize">@dimen/regular_text</item>
    <item name="android:textColor">@color/regular_text</item>
</style>
<style name="style0">
    <item name="android:textSize">@dimen/paragraph_bullet</item>
    <item name="android:textColor">@color/standout_text</item>
    <item name="android:textStyle">bold</item>
</style>
<style name="style1">
    <item name="android:textColor">@color/standout_light_text</item>
    <item name="android:textStyle">italic</item>
</style>

এখানে আমার কোড যা আমার ফর্ম্যাট স্টাইল পদ্ধতিতে কল করে:


SpannableString formattedSpan = formatStyles(getString(R.string.my_text), getString(R.string.text_sub0), R.style.style0, getString(R.string.main_text_sub1), R.style.style1);
textView.setText(formattedSpan, TextView.BufferType.SPANNABLE);

বিন্যাস পদ্ধতি:


private SpannableString formatStyles(String value, String sub0, int style0, String sub1, int style1)
{
    String tag0 = "{0}";
    int startLocation0 = value.indexOf(tag0);
    value = value.replace(tag0, sub0);

    String tag1 = "{1}";
    int startLocation1 = value.indexOf(tag1);
    if (sub1 != null && !sub1.equals(""))
    {
        value = value.replace(tag1, sub1);
    }

    SpannableString styledText = new SpannableString(value);
    styledText.setSpan(new TextAppearanceSpan(getActivity(), style0), startLocation0, startLocation0 + sub0.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    if (sub1 != null && !sub1.equals(""))
    {
        styledText.setSpan(new TextAppearanceSpan(getActivity(), style1), startLocation1, startLocation1 + sub1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    return styledText;
}

আমি মনে করি না যদি স্ট্রিংয়ের স্থানীয়ীকৃত সংস্করণ {0} এবং {1} পুনরায় অর্ডার করে তবে এটি কাজ করবে} যদি স্টার্টলোকেশন 1টি <স্টার্টলোকেশন 0
জোনাথন


8

এইচটিএমএল বিল্ডার ব্যবহার করে এটি করার একটি সহজ উপায়

    myTextView.setText(new HtmlBuilder().
                    open(HtmlBuilder.Type.BOLD).
                    append("Some bold text ").
                    close(HtmlBuilder.Type.BOLD).
                    open(HtmlBuilder.Type.ITALIC).
                    append("Some italic text").
                    close(HtmlBuilder.Type.ITALIC).
                    build()
    );

ফলাফল:

কিছু গা bold ় পাঠ্য কিছু ইটালিক পাঠ্য


7

আপনি যদি এক্সএমএলে স্টাইলযুক্ত পাঠ্য যুক্ত করতে সক্ষম হতে চান তবে আপনি টেক্সটভিউ প্রসারিত একটি কাস্টম ভিউ তৈরি করতে এবং সেটটেক্সটকে ওভাররাইড করতে পারেন:

public class HTMLStyledTextView extends TextView
{
    public HTMLStyledTextView(Context context) {
        super(context);
    }

    public HTMLStyledTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HTMLStyledTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setText(CharSequence text, BufferType type)
    {
       super.setText(Html.fromHtml(text.toString()), type);
    }
}

তারপরে, আপনি এটির মতো এটি ব্যবহার করতে পারেন ( PACKAGE_NAMEআপনার প্যাকেজের নামটি প্রতিস্থাপন করুন ):

<PACKAGE_NAME.HTMLStyledTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="<![CDATA[
        <b>Bolded Text:</b> Non-Bolded Text
    ]]>"
/>

এটি কি তবে অ্যান্ড্রয়েড স্টুডিওতে প্রাকদর্শন করে?
জেপিএম

7

যেমন বলা হয়েছে, ব্যবহার TextView.setText(Html.fromHtml(String))

এবং এইচটিএমএল ফর্ম্যাট স্ট্রিংতে এই ট্যাগগুলি ব্যবহার করুন:

<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>

http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html


3

আমিও

কোটলিন এবং আঙ্কোর সাথে কিছু সুন্দর মার্কআপ ব্যবহার সম্পর্কে কীভাবে -

import org.jetbrains.anko.*
override fun onCreate(savedInstanceState: Bundle?) {
    title = "Created with Beautiful Markup"
    super.onCreate(savedInstanceState)

    verticalLayout {
        editText {
            hint = buildSpanned {
                append("Italic, ", Italic)
                append("highlighted", backgroundColor(0xFFFFFF00.toInt()))
                append(", Bold", Bold)
            }
        }
    }
}

সুন্দর মার্কআপ দিয়ে তৈরি


2

হ্যাঁ, এটি ব্যবহার করা সম্ভব SpannedString। আপনি যদি কোটলিন ব্যবহার করছেন তবে এটি ব্যবহার করে করা আরও সহজ হয়ে যায় core-ktx, কারণ এটি করার জন্য এটি একটি ডোমেন-নির্দিষ্ট-ভাষা (ডিএসএল) সরবরাহ করে :

    val string: SpannedString = buildSpannedString {
        bold {
            append("1111")
        }
        append("Devansh")     
    }

এর দ্বারা সরবরাহিত আরও বিকল্পগুলি হ'ল:

append("Hello There")
bold {
    append("bold")
    italic {
        append("bold and italic")
        underline {
            append("then some text with underline")
        }
    }
}

শেষ পর্যন্ত, আপনি কেবল এটি করতে পারেন:

textView.text = string

0

প্রকৃতপক্ষে, এইচটিএমএল অবজেক্ট ব্যতীত আপনি স্প্যানিয়েবল প্রকারের ক্লাসগুলিও ব্যবহার করতে পারেন, যেমন টেক্সট অ্যাপিয়ারেন্সস্প্যান বা টাইপফেসস্প্যান এবং স্প্যানিয়েবল স্ট্রিং টগথার। এইচটিএমএল বর্গও এই প্রক্রিয়াগুলি ব্যবহার করে। তবে স্প্যানিয়েবল ধরণের ক্লাসগুলির সাথে আপনার আরও স্বাধীনতা রয়েছে।


0

এটি স্ট্রিংয়ের দৈর্ঘ্য () পদ্ধতিটি উপকারের মতোই সহজ হতে পারে:

  1. স্ট্রিংস এক্সএমএল ফাইলটিতে পাঠ্য স্ট্রিংকে যতগুলি সাব-স্ট্রিং (অ্যান্ড্রয়েডের দৃষ্টিকোণ থেকে পৃথক স্ট্রিং) হিসাবে বিভক্ত করুন আপনার যতগুলি বিভিন্ন স্টাইলের প্রয়োজন, তাই এটি হতে পারে: str1, str2, str3 (আপনার ক্ষেত্রে যেমন), যা একসাথে যোগদানের পরে আপনি ব্যবহার করেন এমন একক স্ট্রিং।

  2. এবং তারপরে কেবল "স্প্যান" পদ্ধতিটি অনুসরণ করুন, ঠিক যেমন আপনি আপনার কোডটি উপস্থাপন করেছেন - তবে একটি স্ট্রিংয়ের পরিবর্তে, সমস্ত সাবস্ট্রিংগুলিকে একক একটিতে মিশ্রিত করুন, যার প্রতিটি আলাদা কাস্টম শৈলীর সাথে।

আপনি এখনও সংখ্যাগুলি ব্যবহার করেন, তবে সরাসরি না - তারা এখন আর হার্ডকডযুক্ত ফর্ম নেন না (যেমন আপনার কোড অনুসারে) তবে তাদের সংযুক্ত দৈর্ঘ্য () পদ্ধতিগুলি (দুটি নক্ষত্রের পূর্ববর্তী এবং প্রত্যয়যুক্ত নোটটি নোট করুন) হিসাবে প্রতিস্থাপিত করা হচ্ছে। দৈর্ঘ্য () পরিবর্তনটি বোঝার নিখুঁত সংখ্যার স্থানে):

str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, **str.length()**, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

প্রথম স্ট্রিং আকারের জন্য, তারপরে দ্বিতীয় স্ট্রিং আকারের জন্য স্ট্রিংলেন্থ () + 1, স্ট্রিংলেন্থ () + স্ট্রিমিথ লেন্থ () এবং আরও সব সাবস্ট্রিং সহ উদাহরণস্বরূপ 0,7 বা 8,19 এবং তাই ...


0

ওয়েব পৃষ্ঠার নীচে অ্যান্ড্রয়েড স্ট্রিং রিসোর্স শেয়ার হিসাবে একটি সহায়ক স্প্যানিয়েবল ক্লাস ব্যবহার করা । আপনি এটি তৈরি করে যোগাযোগ করতে পারেনCharSquences একটি স্টাইল এবং ।

তবে তারা আমাদের যে উদাহরণ দেয় তা কেবল সাহসী, তির্যক এবং এমনকি পাঠ্যকে রঙিন করার জন্য। এগুলিতে CharSequenceসেট করার জন্য আমার বেশ কয়েকটি শৈলী মোড়ানো প্রয়োজন TextView। সুতরাং যে ক্লাসে (আমি এটি নাম CharSequenceStylesদিয়েছি) আমি এই ফাংশনটি কেবল যুক্ত করেছি।

public static CharSequence applyGroup(LinkedList<CharSequence> content){
    SpannableStringBuilder text = new SpannableStringBuilder();
    for (CharSequence item : content) {
        text.append(item);
    }
    return text;
}

এবং ভিউতে আমি এটি যুক্ত করেছি।

            message.push(postMessageText);
            message.push(limitDebtAmount);
            message.push(pretMessageText);
            TextView.setText(CharSequenceStyles.applyGroup(message));

আমি আশা করি এটি আপনাকে সাহায্য করবে!



0

জোন যেমন বলেছিলেন , আমার কাছে এটিই সেরা সমাধান এবং রানটাইমের সময় আপনার কোনও পাঠ্য সেট করার দরকার নেই, কেবল এই কাস্টম শ্রেণি এইচটিএমএলটেক্সটভিউ ব্যবহার করুন

public class HtmlTextView extends TextView {

  public HtmlTextView(Context context) {
      super(context);
  }

  public HtmlTextView(Context context, AttributeSet attrs) {
      super(context, attrs);
  }

  public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr) 
  {
      super(context, attrs, defStyleAttr);
  }

  @TargetApi(21)
  public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
  }

  @Override
  public void setText(CharSequence s,BufferType b){
      super.setText(Html.fromHtml(s.toString()),b);
  }

}

এবং এটি thats, এখন এটি আপনার এক্সএমএল মধ্যে রাখুন

<com.fitc.views.HtmlTextView
    android:id="@+id/html_TV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/example_html" />

আপনার এইচটিএমএল স্ট্রিং সহ

<string name="example_html">
<![CDATA[
<b>Author:</b> Mr Donuthead<br/>
<b>Contact:</b> me@donut.com<br/>
<i>Donuts for life </i>
]]>

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