অ্যান্ড্রয়েডে strings.xml এর একটি স্ট্রিংয়ে বোল্ড শব্দ old


114

স্ট্রিং.এক্সএমএল এর একটিতে আমার একটি দীর্ঘ পাঠ্য রয়েছে text আমি সাহসী করতে এবং সেই লেখার কিছু শব্দের রঙ পরিবর্তন করতে চাই।

আমি এটা কিভাবে করবো?


আপনি সামগ্রিকভাবে কী অর্জন করার চেষ্টা করছেন সে ক্ষেত্রে আপনি কি আরও কিছুটা নির্দিষ্ট হতে পারেন?
ব্রায়ান

উত্তর:


192

আপনি মূলত আপনার স্ট্রিং রিসোর্সে html ট্যাগ ব্যবহার করতে পারেন:

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

এবং এইচটিএমএল.ফর্মএইচটিএমএল ব্যবহার করুন বা স্প্যানিয়েবল ব্যবহার করুন, আমার পোস্ট করা লিঙ্কটি চেক করুন।

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


16
এছাড়াও, আপনি কীভাবে আপনার সংস্থান স্ট্রিংটি ব্যবহার করেন তার উপর নির্ভর করে আপনার কোনও সিডিএটি ব্লকে বোল্ড / ইটালিক ট্যাগ লাগাতে হবে যাতে এটি ব্যবহার না করা অবধি পার্স করা যায় না Html.fromHtml()... <![CDATA[<b><i>so</i></b>]]>...
ডুলে

133
অফিসিয়াল অ্যান্ড্রয়েড ডকুমেন্টেশন অন্য যে কেউ এই সম্পর্কে কিছুটা অস্পষ্ট পেয়েছে তার জন্য: আপনি যদি নিজের স্ট্রিং রিসোর্সে <b> এর মতো ট্যাগ ব্যবহার করেন তবে নিশ্চিত করুন যে আপনি এটির getText(R.string.whatever)পরিবর্তে এটি পুনরুদ্ধার করেছেনgetString(R.string.whatever)
অ্যান্ডিজার্স

1
এর nameবদলে থাকার কথা না id?
হেন্দ্র অ্যাংগ্রিয়ান

4
সুতরাং Html.fromHtmlবা প্রয়োজন নেই SpannablegetText(R.string.whatever)উল্লিখিত @ ও এন্ডিজারদের মতো কেবল ব্যবহার করুন ।
আলা এম।

1
@ অ্যান্ডিজার্স "আমার নাম <b>% s </b>" এর মতো স্ট্রিংয়ের জন্য আমরা কী করতে পারি যা গেটটেক্সটটি কেবলমাত্র একক প্যারামিটার গ্রহণ না করে ব্যবহার করতে পারে না?
টেলর

45

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

<resources>
<string name="string_resource_name"><![CDATA[<b> Your text </b>]]> </string>
</resources>

এবং স্ট্রিং রিসোর্স থেকে গা bold় পাঠ্য যেমন:

private Spanned getSpannedText(String text) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT);
        } else {
            return Html.fromHtml(text);
        }
    }


 String s = format(context.getResources().getString(R.string.string_resource_name));
 textView.setText(getSpannedText(s));

এটি সেরা উত্তর এবং এটি সম্পূর্ণরূপে সেই লোকদের জন্য কাজ করে যারা @ বাইন্ডিংএডাপ্টার ব্যবহার করেন। ধন্যবাদ ভাই.
Sup.Ia

44

ডেভিড ওলসন যেমন বলেছেন, আপনি আপনার স্ট্রিং রিসোর্সে HTML ব্যবহার করতে পারেন:

<resource>
    <string name="my_string">A string with <i>actual</i> <b>formatting</b>!</string>
</resources>

তারপরে আপনি যদি তার getText(R.string.my_string)পরিবর্তে ব্যবহার করেন তবে এম্বেড থাকা ফর্ম্যাটিংটিতে থাকা পরিবর্তে getString(R.string.my_string)ফিরে আসুন ।CharSequenceString


গেট টেক্সট চার্চ সিক্যেন্সকে স্প্যানযোগ্য নয়
টিগ্রান বাবজনায়ান

1
যদি আপনার স্ট্রিংয়ের পরিমাণ এমন হয় যা আপনাকে একটি সংখ্যা যুক্ত করতে হবে?
টেলর

getText আপনাকে স্থানধারক ব্যবহারের অনুমতি দেয় না
ভিনসেন্ট_পেন

10

কোটলিনে, আপনি সংস্থানগুলিতে ক্রিয়াকলাপ তৈরি করতে পারেন (ক্রিয়াকলাপ | টুকরা | প্রসঙ্গ) যা আপনার স্ট্রিংটিকে এইচটিএমএল স্প্যানে রূপান্তর করবে will

যেমন

fun Resources.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Resources.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = getQuantityString(id, quantity).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

fun String.toHtmlSpan(): Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
    Html.fromHtml(this)
}

ব্যবহার

//your strings.xml
<string name="greeting"><![CDATA[<b>Hello %s!</b><br>]]>This is newline</string>

//in your fragment or activity
resources.getHtmlSpannedString(R.string.greeting, "World")

আরও এক্সটেনশানগুলি সম্পাদনা করুন

fun Context.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Context.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Activity.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Activity.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Fragment.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Fragment.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

@ হিমাংশু মরি কিছু স্নিপেট সাহায্য করবে। আপনি কোটলিন ক্লাসে এটি ব্যবহার করছেন?
এসভিকাকা

1
ক্রিয়াকলাপ
বর্ধনের

2

strings.xml

<string name="my_text"><Data><![CDATA[<b>Well Done !</b><br></br>All of your activities are completed.<br></br>You may now close the app.<br></br>See you again next time.]]></Data></string>

নির্ধারণ করা

textView.setText(Html.fromHtml(getString(R.string.activity_completed_text)));

1

আপনি স্ট্রিং থেকে এটি করতে পারেন

 <resources xmlns:tools="http://schemas.android.com/tools">

 <string name="total_review"><b>Total Review: </b> </string>

 </resources>

এবং জাভা কোড থেকে এটি অ্যাক্সেস করতে পারেন

proDuctReviewNumber.setText(getResources().getString(R.string.total_review)+productDetailsSuccess.getProductTotalReview());

1

strings.xml

<string name="sentence">This price is <b>%1$s</b> USD</string>

page.java

String successMessage = getString(R.string.message,"5.21");

এই মূল্য 5.21 ডলার


1
পরামিতিগুলি পাস করার জন্য আপনার দেশীয় কার্যকারিতাটি ব্যবহার করা উচিত। কেবল "{1}" এর পরিবর্তে "% 1 $ s" রাখুন, এবং প্রতিস্থাপন ছাড়াই getString (R.string.message, "5.21") কল করুন
অ্যাড্রিয়ান গ্রিগুতিস

দস্তাবেজগুলি এই উত্তরটির সমর্থন করে: developer.android.com/guide/topics/resources/… যদিও এটি এইচটিএমএল পার্সারের মধ্য দিয়ে যেতে হবে
প্রজেক্টডেল্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.