একাধিক রঙিন পাঠ্য সহ একক পাঠ্যদর্শন


167

শিরোনামটি যেমন বলেছে, আমি জানতে চাই যে একটি একক পাঠ্যদর্শন উপাদানটিতে দুটি ভিন্ন বর্ণের অক্ষর অর্জন করা সম্ভব।



1
এটি অনুরূপ নয় যেহেতু প্রশ্নকর্তা বিশেষভাবে রঙের জন্য জিজ্ঞাসা করছেন।
ইকবাল

এর জন্য একটি দুর্দান্ত লাইব্রেরি রয়েছে, আমার মনে হয়: ব্লগ.স্টাইলিংঅ্যান্ড্রয়েড /
অ্যান্ড্রয়েড বিকাশকারী

আমি কিছু লাইব্রেরিও লিখেছি যা এর সাথে একইরকম আচরণ করে: github.com/ha-yi/ মাল্টি কালার টেক্সটভিউ
Nukman

উত্তর:


328

হ্যাঁ, যদি আপনি ফরম্যাট Stringসঙ্গে htmlএর font-colorসম্পত্তি তারপর, এটা পদ্ধতি পাসHtml.fromHtml(your text here)

String text = "<font color=#cc0029>First Color</font> <font color=#ffcc00>Second Color</font>";
yourtextview.setText(Html.fromHtml(text));

ধন্যবাদ আমার জন্য সহায়ক। +1
হার্ডিক যোশি

10
ইউজারিনপুট ব্যবহার করে পালাতে ভুলবেন না Html.escapeHtml(str)
কেলুনিক

1
এপিআই স্তর 1
2red13

3
শুধু একটি সতর্কতা। আমার লেখার বড় হাতের অক্ষরে থাকার জন্য যখন আমার প্রয়োজন ছিল তখন আমি একটি সমস্যা ছিল। আমি অ্যান্ড্রয়েড ব্যবহার করছিলাম: টেক্সটএলক্যাপস = এক্সএমএলে "সত্য" এবং একই সময়ে, বড় হাতের মধ্যে আমার HTML সামগ্রী ছিল। এটা কাজ করে না। আমি এক্সএমএল বৈশিষ্ট্যটি সরিয়েছি এবং এটি এখন ভাল কাজ করছে। সাবধান থাকুন, কারণ আপনি কোডে সেটআলক্যাপস () ব্যবহার করেন, একই সমস্যাটি উপস্থিত হবে।
joao2fast4u

5
Html.fromHtml(String)পরিবর্তে ব্যবহার করা হয়, এখন অবচয় করা হয়েছে Html.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)আরো তথ্য পাওয়া যাবে এখানে।
জেডিবারেল

165

আপনি এইচটিএমএল ছাড়াই একাধিক রঙের সাথে লাইনগুলি মুদ্রণ করতে পারেন:

TextView textView = (TextView) findViewById(R.id.mytextview01);
Spannable word = new SpannableString("Your message");        

word.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(word);
Spannable wordTwo = new SpannableString("Your new message");        

wordTwo.setSpan(new ForegroundColorSpan(Color.RED), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.append(wordTwo);

দুর্দান্ত, ধন্যবাদ, ব্যাকগ্রাউন্ড কালারস্প্যান করতে পারে। আপনার উদাহরণে একটি ছোট টাইপ রয়েছে, ওয়ার্ড টোস্প্যান এবং ওয়ার্ডসস্প্যান, টু
স্টিভ

কিভাবে ইউনিট সম্পর্কে এক বারেই textview পরীক্ষা নিশ্চিত করার যে মধ্যে Color.RED টেক্সট প্রান্ত stackoverflow.com/questions/26611533/...
sudocoder

1
Java.lang.StringIndexOutOfBoundsException: দৈর্ঘ্য = 3 পাওয়ার জন্য আমার পক্ষে কাজ করা হচ্ছে না; সূচক = 12`
মুহাম্মদ বাবর

1
স্ট্রিংইন্ডেক্সআউটআউটবাউন্ডসেক্সপশন নিজেই ব্যাখ্যামূলক। আপনি দৈর্ঘ্যের বাইরে স্ট্রিং অ্যাক্সেস করছেন।
স্বপ্নিল কোতোয়াল

1
আমার স্ট্রিংগুলি স্থির করা হয়নি, সুতরাং অ্যাপ্লিকেশন চলাকালীন স্ট্রিংগুলি উত্পন্ন হবে। আমি এই প্রশ্নের প্রায় সমস্ত উত্তর চেষ্টা করেছি। তবে শুধুমাত্র এই সমাধানটি আমার পক্ষে কাজ করেছিল।
মোঃ সাব্বির আহমেদ

33

আপনি Spannableআপনার এফেক্ট প্রয়োগ করতে ব্যবহার করতে পারেন TextView:

এখানে একটি TextViewপাঠ্যের প্রথম অংশটি রঙ করার জন্য আমার উদাহরণ (এইচটিএমএল উদাহরণের মতো স্ট্রিংয়ে হার্ড কোডিংয়ের পরিবর্তে রঙটি গতিশীলভাবে সেট করার অনুমতি দেওয়ার সময়!)

    mTextView.setText("Red text is here", BufferType.SPANNABLE);
    Spannable span = (Spannable) mTextView.getText();
    span.setSpan(new ForegroundColorSpan(0xFFFF0000), 0, "Red".length(),
             Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

এই উদাহরণে আপনি 0 এর সাথে 0xFFFF0000 প্রতিস্থাপন করতে পারেন getResources().getColor(R.color.red)


1
আপনার যদি এই ওপরের কেসটির প্রয়োজন হয় তবে কেবল স্ট্রিংগুলিতে আপার কেস () করুন।
গ্রামীণ

33

আমি এইভাবে করেছি:

রেফারেন্স চেক করুন

সেট রঙ উপর লেখা দ্বারা স্ট্রিং ক্ষণস্থায়ী এবং রঙ :

private String getColoredSpanned(String text, String color) {
    String input = "<font color=" + color + ">" + text + "</font>";
    return input;
}

কোডের নীচে কল করে পাঠ্যদর্শন / বাটন / সম্পাদনা পাঠ্য ইত্যাদিতে পাঠ্য সেট করুন :

TextView:

TextView txtView = (TextView)findViewById(R.id.txtView);

রঙিন স্ট্রিং পান:

String name = getColoredSpanned("Hiren", "#800000");
String surName = getColoredSpanned("Patel","#000080");

বিভিন্ন রঙের সাথে দুটি স্ট্রিংয়ের পাঠ্য ভিউতে পাঠ্য সেট করুন:

txtView.setText(Html.fromHtml(name+" "+surName));

সম্পন্ন


1
এনআইসি এক, তবে এইচটিএমএল.ফ্রমএইচটিএমএল এপিআই 24 থেকে অনুমিত হয়েছে
অনুরাজ আর

আপনি কল প্রতিস্থাপন করতে পারেন Html.fromHtml("...")কল সঙ্গেHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
stkent

31

স্প্যানিয়েবল স্ট্রিংবিল্ডার ব্যবহার করুন

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);

8

আরে ছেলেরা আমি এটি করেছি, চেষ্টা করে দেখুন

TextView textView=(TextView)findViewById(R.id.yourTextView);//init

//here I am appending two string into my textView with two diff colors.
//I have done from fragment so I used here getActivity(), 
//If you are trying it from Activity then pass className.this or this; 

textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));

আপনার ভিতরে টেক্সটভিউ ইউটিলেস ক্লাসটি এই পদ্ধতিটি যুক্ত করুন

 /***
 *
 * @param mString this will setup to your textView
 * @param colorId  text will fill with this color.
 * @return string with color, it will append to textView.
 */
public static Spannable getColoredString(String mString, int colorId) {
    Spannable spannable = new SpannableString(mString);
    spannable.setSpan(new ForegroundColorSpan(colorId), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    Log.d(TAG,spannable.toString());
    return spannable;
}

আমি এখনই আপডেট করেছি, একবার এটি পরীক্ষা করে দেখুন, এটি আমার জন্য কাজ করছে।
আব্দুল রিজওয়ান

আপনি কি এই স্ট্রিংটি ব্যবহারের জন্য এইচটিএমএল?
সের্গেই শুস্তিকভ

স্ট্রিং.এক্সএমএল ফাইলের ভিতরে আমি ভেরিয়েবল তৈরি করেছি এবং এটি সেট করেছি, এটি আমার জন্য কাজ করছে ঠিক এখন আমি এটি করছি, আপনি দয়া করে আপনার স্ট্রিংটি এখানে দিতে পারেন।
আব্দুল রিজওয়ান

5

স্ট্রিং ফাইলটিতে স্ট্রিং ব্যবহার করা ভাল:

    <string name="some_text">
<![CDATA[
normal color <font color=\'#06a7eb\'>special color</font>]]>
    </string>

ব্যবহার:

textView.text=HtmlCompat.fromHtml(getString(R.string.some_text), HtmlCompat.FROM_HTML_MODE_LEGACY)

4

আমি এই প্রশ্নের অনুরূপ অন্যান্য প্রশ্নের জন্য কিছু কোড লিখেছি, তবে সেই প্রশ্নটি সদৃশ হয়ে গেছে সুতরাং আমি সেখানে উত্তর দিতে পারি না তাই যদি কেউ একই প্রয়োজনীয়তার সন্ধান করে তবে আমি আমার কোডটি এখানে রাখছি।

এটি পুরোপুরি কোড কাজ করছে না, এটির কাজ করার জন্য আপনার কিছু ছোটখাটো পরিবর্তন করা দরকার।

কোডটি এখানে:

আমি স্প্যানিয়েবল টেক্সট ব্যবহারের জন্য গ্র্যামিম ধারণাটি ব্যবহার করেছি।

String colorfulText = "colorfulText";       
    Spannable span = new SpannableString(colorfulText);             

    for ( int i = 0, len = colorfulText.length(); i < len; i++ ){
        span.setSpan(new ForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                     
    }   

    ((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);

এলোমেলো রঙ পদ্ধতি:

  private int getRandomColor(){
        Random rnd = new Random();
        return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
    }

2

এটা চেষ্টা কর:

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

2

এইচটিএমএল ফর্ম্যাটিংয়ের পরিবর্তে স্প্যানিয়েবলবিল্ডার ক্লাসটি ব্যবহার করুন যেখানে এটি সম্ভব কারণ এটি আরও দ্রুততর এইচটিএমএল ফর্ম্যাটটি বিশ্লেষণ করে। আমার নিজের বেঞ্চমার্ক "SpannableBuilder বনাম এইচটিএমএল" এ দেখুন গিটহাব ধন্যবাদ!


1

দুর্দান্ত উত্তর! রংধনু রঙিন পাঠ্য তৈরি করতে আমি স্প্যানিয়েবল ব্যবহার করতে সক্ষম হয়েছি (যাতে এটি কোনও রঙের অ্যারের জন্য পুনরাবৃত্তি হতে পারে)। এখানে আমার পদ্ধতিটি, যদি এটি কাউকে সহায়তা করে:

private Spannable buildRainbowText(String pack_name) {
        int[] colors = new int[]{Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE};
        Spannable word = new SpannableString(pack_name);
        for(int i = 0; i < word.length(); i++) {
            word.setSpan(new ForegroundColorSpan(colors[i]), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return word;
    }

এবং তারপরে আমি স্রেফ টেক্সট (buildRainboxText (প্যাক_নাম)) সেট করেছি; মনে রাখবেন যে আমি যে সমস্ত শব্দগুলি দিয়েছি তা 15 টি অক্ষরের নীচে এবং এটি কেবল 5 টি বর্ণ 3 বার পুনরাবৃত্তি করে - আপনি আপনার ব্যবহারের জন্য অ্যারের রং / দৈর্ঘ্য সামঞ্জস্য করতে চান!


1
if (Build.VERSION.SDK_INT >= 24) {
     Html.fromHtml(String, flag) // for 24 API  and more
 } else {
     Html.fromHtml(String) // or for older API 
 }

24 এপিআই এবং আরও বেশি (পতাকা)

public static final int FROM_HTML_MODE_COMPACT = 63;
public static final int FROM_HTML_MODE_LEGACY = 0;
public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1;
public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0;
public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1;

অধিক তথ্য


1

যেহেতু এপিআই 24 আপনার কাছে FROM_HTML_OPTION_USE_CSS_COLORS রয়েছে তাই আপনি সিএসএসে রঙগুলি পুরো সময়ের সাথে পুনরাবৃত্তি করার পরিবর্তে সংজ্ঞায়িত করতে পারেন font color=" - যখন আপনার কিছু HTML রয়েছে এবং আপনি কিছু পূর্বনির্ধারিত ট্যাগ হাইলাইট করতে চান - আপনাকে কেবল আপনার এইচটিএমএলের শীর্ষে সিএসএস খণ্ড যুক্ত করতে হবে


0

25 জুন 2020 @ কেনারকেসেলারের মাধ্যমে

আমি কোটলিন উত্তর ভাগ করতে চাই :

fun setTextColor(tv:TextView, startPosition:Int, endPosition:Int, color:Int){
    val spannableStr = SpannableString(tv.text)

    val underlineSpan = UnderlineSpan()
    spannableStr.setSpan(
        underlineSpan,
        startPosition,
        endPosition,
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE
    )

    val backgroundColorSpan = ForegroundColorSpan(this.resources.getColor(R.color.agreement_color))
    spannableStr.setSpan(
        backgroundColorSpan,
        startPosition,
        endPosition,
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE
    )

    val styleSpanItalic = StyleSpan(Typeface.BOLD)
    spannableStr.setSpan(
        styleSpanItalic,
        startPosition,
        endPosition,
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE
    )

    tv.text = spannableStr
}

পরে, ফাংশন উপরের কল। আপনি একাধিক কল করতে পারেন:

setTextColor(textView, 0, 61, R.color.agreement_color)
setTextColor(textView, 65, 75, R.color.colorPrimary)

আউটপুট: আপনি একে অপরের সাথে আন্ডারলাইন এবং বিভিন্ন রঙ দেখতে পারেন।

@canerkaseler

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