একটি টেক্সটভিউতে একটি শব্দের পাঠ্যের রঙ পরিবর্তন করুন


98

আমি একটি উপায় একটি মধ্যে একটি একক শব্দের একটি টেক্সট রঙ পরিবর্তন করার জন্য খোঁজ করছি TextViewএকটি মধ্যে থেকে Activity

উদাহরণস্বরূপ, এটি সহ:

String first = "This word is ";
String next = "red"
TextView t = (TextView) findViewById(R.id.textbox);
t.setText(first + next);

আমি কীভাবে nextলেখার রঙকে লাল করে তুলব ?




উত্তর:


176

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

String first = "This word is ";
String next = "<font color='#EE0000'>red</font>";
t.setText(Html.fromHtml(first + next));

তবে এর জন্য আপনাকে যখন রঙ পরিবর্তন করতে চান তখন পাঠ্যদর্শনটি পুনর্নির্মাণের প্রয়োজন হবে (যা?) যা ঝামেলা সৃষ্টি করতে পারে।


4
এটি অবশ্যই সহজতম উপায় তবে রঙটি রঙিন হওয়া উচিত নয় '# EE0000' হেক্সাডেসিমাল রঙ বোঝাতে পাউন্ড প্রতীকটি প্রয়োজন is
টম

স্থির, ধন্যবাদ! আমি প্রকৃত কোড থেকে বা রঙের জেনারেটরের ওয়েবসাইটের সাথে মেমরি থেকে অনুলিপি করেছি কিনা তা মনে নেই so
ড্যান

ঠিক আছে নিশ্চিত করা! এছাড়াও, যেমনটি আমি জানতে পেরেছি আপনি 8-অঙ্কের হেক্স কোড ব্যবহার করতে পারবেন না তাই কোনও আলফা উপাদান নেই। সে আমাকে এক মুহুর্তের জন্য থামিয়ে দিয়েছিল।
টম

ব্যবহার করা fromHtmlবর্তমানে অবচিত হয়েছে
অ্যালেক্স Jolig

Html.fromHtmlঅবচয় করা হয়। এই সমাধানটি আমার পক্ষে কাজ করেছিল!
কোডারপিসি

74
t.setText(first + next, BufferType.SPANNABLE);
Spannable s = (Spannable)t.getText();
int start = first.length();
int end = start + next.length();
s.setSpan(new ForegroundColorSpan(0xFFFF0000), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

আপনাকে স্প্যানিয়েবল ব্যবহার করতে হবে এটি আপনাকে কিছু পাঠ্যের আকার বাড়াতে, এটিকে সাহসী করা ইত্যাদি .... এমনকি কিছু চিত্রের মধ্যে রাখারও অনুমতি দেয়।


4
ভাল উত্তর, ধন্যবাদ। এক্ষেত্রে "স্টার্ট + নেক্সট লেংথ ()" এর পরিবর্তে "s.leth ()" ব্যবহার করা যেতে পারে: int end = s.leight ();
ওলেগ

4
যদি কেউ Xamarin.Android সমাধানের সন্ধান করে। আপনি আপনার নিয়ন্ত্রণের সম্পত্তি SpannableStringব্যবহার করে অবজেক্ট বরাদ্দ করতে পারেন TextFormatted
জামশেদ কামরান

এই কাজ পেতে পারে না। বিকে'র সমাধান নিয়ে শেষ হয়েছে।
2b77bee6-5445-4c77-b1eb-4df3e5

1. যদি কোনও বিল্ড থাকে তবে এটি ব্যবহার করা সর্বদা ভাল। ২. তোমার জন্য কি কাজ হয়নি? এই সমাধানটি পুরানো, খুব পুরানো, কিছু এপিএস পরিবর্তিত হয়েছে, যুক্ত হয়েছে, মুছে ফেলা হয়েছে, বাগ সংশোধন হয়েছে, ঠিক কী কাজ করতে ব্যর্থ হয়েছিল?
কোডস্ক্রাইবার

4
আমি java.lang.String cannot be cast to android.text.Spannableত্রুটি পাই
লাশগার

38

এটির মতো স্প্যানিয়েবল স্ট্রিংবিল্ডার ব্যবহার করুন:

SpannableStringBuilder builder = new SpannableStringBuilder();

SpannableString str1= new SpannableString("Text1");
str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0);
builder.append(str1);

SpannableString str2= new SpannableString(appMode.toString());
str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0);
builder.append(str2);

TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText( builder, TextView.BufferType.SPANNABLE);

new ForegroundColorSpan(Color)পাঠ্যের আসল ডিফল্ট রঙ ধরে রাখতে আমি কি এমন কোনও প্রতিস্থাপন করতে পারি ?
cjnash

পাঠ্যদণ্ডের মাঝখানে কীভাবে সরল পাঠ (স্ট্রিং) যুক্ত করবেন?
রাগভেন্দ্র এম

5

দীর্ঘ স্ট্রিংয়ের জন্য আপনি এটি ব্যবহার করতে পারেন:

String help = getString(R.string.help);
help = help.replace("some word", "<font color='#EE0000'>some word</font>");
txtDesc.setText(Html.fromHtml(help));

3

আপনি যদি Stringকোনও TextViewপাঠ্যের অভ্যন্তরে নির্দিষ্ট সমস্ত দৃষ্টান্তের অবস্থাটি পরিবর্তন করতে চান (কেস সংবেদনশীল) আপনি এটি ব্যবহার করতে পারেন StringBuilderএবং এটি SpannableStringপছন্দ করতে পারেন :

StringBuilder textBuilder = new StringBuilder(myTextView.getText().toString());
StringBuilder searchedTextBuilder = new StringBuilder((mySearchedString));
SpannableString spannableString = new SpannableString(myTextView.getText().toString());

int counter = 0;
int index = 0;

for (int i = 0;i < textBuilder.length() - mySearchedString.length() - 1;i++)
{
    counter = 0;
    if (Character.toLowerCase(textBuilder.charAt(i)) == Character.toLowerCase(searchedTextBuilder.charAt(index)))
    {
        counter++;
        index++;
        for (int j = 1,z = i + 1;j < mySearchedString.length() - 1;j++,z++)
        {
            if (Character.toLowerCase(textBuilder .charAt(z)) == Character.toLowerCase(searchedTextBuilder .charAt(index)))
            {
                counter++;
                index++;
            }
            else
            {
                index++;
                if (index % mySearchedString.length() == 0)
                {
                    index = 0;
                }
                break;
             }
        }
        if (counter == mySearchedString.length() - 1) // A match
        {
            spannableString.setSpan(new ForegroundColorSpan(Color.RED), i,
                                i + mySearchedString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Do the change you want(In this case changing the fore ground color to red)
            index = 0;
            continue;
        }
        else
        {
            index = 0;
            continue;
        }
    }
}
myTextView.setText(spannableString);

}

  • পুরো TextViewপাঠ্য a এর ভিতরে সঞ্চয় করুনStringBuilder
  • ক এর ভিতরে অনুসন্ধান করা স্ট্রিং সংরক্ষণ করুন StringBuilder
  • এর মধ্যে পুরো রঙের TextViewপাঠ্য সংরক্ষণ করুনSpannableString
  • পাঠ্যের Stringভিতরে সমস্ত দৃষ্টান্ত সন্ধান করার জন্য একটি সহজ অপারেশন করুন TextViewএবং পৌঁছে গেলে সেগুলি পরিবর্তন করুন।
  • পাঠ্য মান সেট TextViewকরতে SpannableString

1

আমি আমার নিজস্ব ব্যবহারের জন্য কোটলিনে একটি ইউটিলিটি ফাংশন বাস্তবায়িত করেছি এবং অন্য কারও জন্য সম্ভবত দরকারী।

fun getCusomTextWithSpecificTextWithDiffColor(textToBold: String, fullText: String,
                                                  targetColor: Int) =
            SpannableStringBuilder(fullText).apply {
                setSpan(ForegroundColorSpan(targetColor),
                        fullText.indexOf(textToBold),
                        (fullText.indexOf(textToBold) + textToBold.length),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            }

আমি এটি কীভাবে ব্যবহার করছি:

context?.let {
        infoMessage.text = AppUtils.getCusomTextWithSpecificTextWithDiffColor(
                wordAsBold,
                completeSentence, ContextCompat.getColor(it, R.color.white))
    }

1

ব্যবহার:

makeTextBold("Your order is accepted","accepted", textView);
makeTextBold("Your order is canceled","canceled", textView);

ফাংশন:

public static void makeTextBold(String sentence, String word, AppCompatTextView textView) {
    SpannableStringBuilder builder = new SpannableStringBuilder();
    int startIndex = sentence.indexOf(word.toLowerCase().trim());
    int endIndex = startIndex + word.toLowerCase().trim().length();
    SpannableString spannableString = new SpannableString(sentence);
    StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
    spannableString.setSpan(boldSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //To make text Bold
    spannableString.setSpan(new ForegroundColorSpan(Color.RED), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //To change color of text
    builder.append(spannableString);
    textView.setText(builder, TextView.BufferType.SPANNABLE);
}

0

আমি মনে করি এটি স্ট্রিংয়ে কোনও শব্দ রঙ করার জন্য এটি আরও পঠনযোগ্য এটি সম্ভবত আরও কিছুটা দক্ষ কারণ আপনি একবার লিখেছিলেন

    String str  = YOUR_STRING
    Spannable s = new SpannableString(str);
    int start = str.indexOf(err_word_origin);
    int end =  start + err_word_origin.length();
    s.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    YOUR_TEXT_VIEW.setText(s , TextView.BufferType.SPANNABLE);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.