উত্তর:
আপডেট : যেমন @ নীচে উল্লিখিত গুগল তৈরি করেছে HtmlCompat
যা নীচের পদ্ধতির পরিবর্তে ব্যবহার করা যেতে পারে। implementation 'androidx.core:core:1.0.1
আপনার অ্যাপ্লিকেশনটির বিল্ড.gradle ফাইলটিতে এই নির্ভরতা যুক্ত করুন। আপনি সর্বশেষতম সংস্করণ ব্যবহার করেছেন তা নিশ্চিত করুন androidx.core:core
।
এটি আপনাকে ব্যবহার করতে দেয়:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
আপনি এইচটিএমএলকম্প্যাট-ডকুমেন্টেশনের বিভিন্ন পতাকা সম্পর্কে আরও পড়তে পারেন
মূল উত্তর:
অ্যান্ড্রয়েড এন এ তারা একটি নতুন Html.fromHtml
পদ্ধতি চালু করেছে । Html.fromHtml
পতাকাগুলির জন্য এখন একটি অতিরিক্ত প্যারামিটার প্রয়োজন। আপনার এইচটিএমএল কীভাবে প্রদর্শিত হয় সে সম্পর্কে এই পতাকা আপনাকে আরও নিয়ন্ত্রণ দেয়।
অ্যান্ড্রয়েড এন এবং তার উপরে আপনার এই নতুন পদ্ধতিটি ব্যবহার করা উচিত। পুরানো পদ্ধতিটি অবহেলা করা হয়েছে এবং ভবিষ্যতের অ্যান্ড্রয়েড সংস্করণগুলিতে সরানো যেতে পারে।
আপনি নিজের ইউটিল-পদ্ধতি তৈরি করতে পারেন যা পুরানো সংস্করণে পুরানো পদ্ধতি এবং অ্যান্ড্রয়েড এন এবং তারপরে আরও নতুন পদ্ধতি ব্যবহার করবে। আপনি যদি কোনও সংস্করণ যোগ না করেন তবে আপনার অ্যাপটি অ্যান্ড্রয়েড সংস্করণে কমবে check আপনি আপনার ইউটিল ক্লাসে এই পদ্ধতিটি ব্যবহার করতে পারেন।
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
আপনি চাইলে এটিকে HTML.FROM_HTML_MODE_LEGACY
অতিরিক্ত প্যারামিটারে রূপান্তর করতে পারেন। এটি কোন পতাকাটি ব্যবহার করবে সে সম্পর্কে এটি আপনাকে আরও নিয়ন্ত্রণ দেয়।
আপনি এইচটিএমএল ক্লাস ডকুমেন্টেশনের বিভিন্ন পতাকা সম্পর্কে আরও পড়তে পারেন
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
কেবল একটি মন্তব্য যুক্ত করাও এটি কার্যকর else
useful
আমার এই প্রচুর সতর্কতা ছিল এবং আমি সর্বদা FROM_HTML_MODE_LEGACY ব্যবহার করি তাই আমি এইচটিএমএলকম্প্যাট নামে একটি সহায়ক শ্রেণি তৈরি করেছি যাতে নিম্নলিখিতটি রয়েছে:
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String source) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(source);
}
}
এইচটিএমএল () এর পতাকাগুলির সাথে তুলনা করুন।
<p style="color: blue;">This is a paragraph with a style</p>
<h4>Heading H4</h4>
<ul>
<li style="color: yellow;">
<font color=\'#FF8000\'>li orange element</font>
</li>
<li>li #2 element</li>
</ul>
<blockquote>This is a blockquote</blockquote>
Text after blockquote
Text before div
<div>This is a div</div>
Text after div
অথবা আপনি ব্যবহার করতে পারেন androidx.core.text.HtmlCompat
:
HtmlCompat.fromHtml("<b>HTML</b>", HtmlCompat.FROM_HTML_MODE_LEGACY)
আপনি যদি কোটলিনে বিকাশের যথেষ্ট ভাগ্যবান হন তবে কেবল একটি এক্সটেনশন ফাংশন তৈরি করুন:
fun String.toSpanned(): Spanned {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
@Suppress("DEPRECATION")
return Html.fromHtml(this)
}
}
এবং তারপরে এটিকে সর্বত্র ব্যবহার করা খুব মিষ্টি:
yourTextView.text = anyString.toSpanned()
Spanned
এবং টাইপিংগুলি সংরক্ষণ করতে পারেনreturn
এই পদ্ধতি ছিল
অবচিতমধ্যে এপিআই স্তর 24 ।
আপনার FROM_HTML_MODE_LEGACY ব্যবহার করা উচিত
এর মধ্যে ফাঁকা রেখা (দুটি নতুন লাইন অক্ষর) দিয়ে ব্লক-স্তরীয় উপাদানগুলি পৃথক করুন। এটি এন এর পূর্বে উত্তরাধিকার আচরণ is
কোড
if (Build.VERSION.SDK_INT >= 24)
{
etOBJ.setText(Html.fromHtml("Intellij \n Amiyo",Html.FROM_HTML_MODE_LEGACY));
}
else
{
etOBJ.setText(Html.fromHtml("Intellij \n Amiyo"));
}
কোটলিনের জন্য
fun setTextHTML(html: String): Spanned
{
val result: Spanned = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(html)
}
return result
}
কল
txt_OBJ.text = setTextHTML("IIT Amiyo")
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
অফিসিয়াল ডক থেকে:
fromHtml(String)
পদ্ধতিটি এপিআই স্তরের 24-এ অবমুক্ত করা হয়েছিলfromHtml(String, int)
instead পরিবর্তে ব্যবহার করুন।
TO_HTML_PARAGRAPH_LINES_CONSECUTIVE
এর জন্য বিকল্পtoHtml(Spanned, int)
:'\n'
অভ্যন্তরীণ<p>
উপাদানগুলি দ্বারা সীমানাযুক্ত টানা ধারাবাহিক রেখা মোড়ানো ।
TO_HTML_PARAGRAPH_LINES_INDIVIDUAL
এর জন্য বিকল্পtoHtml(Spanned, int)
:'\n'
একটি<p>
বা কোনও<li>
উপাদানের অভ্যন্তরে বিসীমাযুক্ত পাঠ্যের প্রতিটি লাইন মোড়ানো ।
https://developer.android.com/reference/android/text/Html.html
আপনি যদি কোটলিন ব্যবহার করছেন তবে আমি কোটলিন এক্সটেনশন ব্যবহার করে এটি অর্জন করেছি:
fun TextView.htmlText(text: String){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setText(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY))
} else {
setText(Html.fromHtml(text))
}
}
তারপরে এটিকে কল করুন:
textView.htmlText(yourHtmlText)
@ রকনি এবং @ কে 2col এর উত্তরটি প্রসারিত করতে উন্নত কোডটি দেখতে পাবেন:
@NonNull
public static Spanned fromHtml(@NonNull String html) {
if (CompatUtils.isApiNonLowerThan(VERSION_CODES.N)) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
return Html.fromHtml(html);
}
}
কোথায় CompatUtils.isApiNonLowerThan
:
public static boolean isApiNonLowerThan(int versionCode) {
return Build.VERSION.SDK_INT >= versionCode;
}
পার্থক্যটি হ'ল এখানে কোনও অতিরিক্ত স্থানীয় ভেরিয়েবল নেই এবং অবচয় কেবলমাত্র এতে রয়েছে else
শাখায় রয়েছে। সুতরাং এটি একক শাখা ছাড়াও সমস্ত পদ্ধতি দমন করবে না।
এটি যখন গুগল অ্যান্ড্রয়েডের ভবিষ্যতের কিছু সংস্করণে এমনকি fromHtml(String source, int flags)
পদ্ধতিটিকে হ্রাস করার সিদ্ধান্ত নেবে তখন তা সাহায্য করতে পারে ।
তুমি ব্যবহার করতে পার
//noinspection deprecation
return Html.fromHtml(source);
শুধুমাত্র একক বিবৃতিতে পরিদর্শন দমন করতে তবে পুরো পদ্ধতিটি নয়।
fromHtml()
কীভাবে লাইন ব্রেকগুলি প্রক্রিয়া করতে হবে তা জানাতে একটি পতাকা প্রয়োজন যাতে ফ্রেমওয়ার্ক ক্লাসটি সংশোধন করা হয়েছে । এটি নওগাতে যুক্ত হয়েছিল এবং এটি কেবল অ্যান্ড্রয়েডের সংস্করণ জুড়ে এই শ্রেণীর অসুবিধাগুলির চ্যালেঞ্জকে স্পর্শ করে।
আমি ক্লাসটির মানককরণ এবং ব্যাকপোর্টের জন্য একটি সামঞ্জস্য গ্রন্থাগার প্রকাশ করেছি এবং উপাদান এবং স্টাইলিংয়ের জন্য আরও কলব্যাক অন্তর্ভুক্ত করেছি:
এটি ফ্রেমওয়ার্কের এইচটিএমএল বর্গের মতো হলেও, আরও কলব্যাকের অনুমতি দেওয়ার জন্য কিছু স্বাক্ষর পরিবর্তনগুলি প্রয়োজন। এখানে গিটহাব পৃষ্ঠা থেকে নমুনা দেওয়া হয়েছে:
Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0);
// You may want to provide an ImageGetter, TagHandler and SpanCallback:
//Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0,
// imageGetter, tagHandler, spanCallback);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(fromHtml);
minSdkVersion 15
এবং targetSdkVersion 23
আমি মানগুলি- v24.xml এর জন্য একটি বিল্ড ত্রুটি পাই : Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
আপনার লাইব্রেরি এপিআই স্তর 25 লক্ষ্য করে, স্পষ্টতই। তবুও আমি কীভাবে এটি ব্যবহার করতে পারি?
শুধু একটি ফাংশন করা:
public Spanned fromHtml(String str){
return Build.VERSION.SDK_INT >= 24 ? Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY) : Html.fromHtml(str);
}
উল অলি লি ট্যাগ সহ বেসিক এইচটিএমএল ট্যাগগুলিকে সমর্থন করার জন্য নিম্নলিখিত ব্যবহারের চেষ্টা করুন। নীচে প্রদর্শিত হিসাবে একটি ট্যাগ হ্যান্ডলার তৈরি করুন
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.Html.TagHandler;
import android.util.Log;
public class MyTagHandler implements TagHandler {
boolean first= true;
String parent=null;
int index=1;
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equals("ul")) parent="ul";
else if(tag.equals("ol")) parent="ol";
if(tag.equals("li")){
if(parent.equals("ul")){
if(first){
output.append("\n\t•");
first= false;
}else{
first = true;
}
}
else{
if(first){
output.append("\n\t"+index+". ");
first= false;
index++;
}else{
first = true;
}
}
}
}
}
ক্রিয়াকলাপটি নীচে প্রদর্শিত হিসাবে সেট করুন
@SuppressWarnings("deprecation")
public void init(){
try {
TextView help = (TextView) findViewById(R.id.help);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
help.setText(Html.fromHtml(getString(R.string.help_html),Html.FROM_HTML_MODE_LEGACY, null, new MyTagHandler()));
} else {
help.setText(Html.fromHtml(getString(R.string.help_html), null, new MyTagHandler()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
এবং সংস্থান স্ট্রিং ফাইল হিসাবে এইচটিএমএল পাঠ্য
<! [সিডিএটিএ [... কাঁচা এইচটিএমএল ডেটা ...]]>>