অ্যান্ড্রয়েডে টেক্সটভিউ স্প্যানের রঙ সেট করুন


206

টেক্সটভিউতে কি কেবল স্প্যানের লেখার রঙ সেট করা সম্ভব?

আমি টুইটার অ্যাপের মতো অনুরূপ কিছু করতে চাই, যেখানে পাঠ্যের একটি অংশ নীল। নীচে চিত্র দেখুন:

বিকল্প পাঠ
(উত্স: twimg.com )

উত্তর:


429

অন্য উত্তরটি খুব অনুরূপ হতে পারে তবে TextViewদু'বার পাঠ্য সেট করার প্রয়োজন হবে না

TextView TV = (TextView)findViewById(R.id.mytextview01);

Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");        

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TV.setText(wordtoSpan);

তবে আমি কীভাবে একাধিক শব্দের জন্য রঙ পরিবর্তন করতে পারি?
মোস্তফা হাসিম

1
@ মোস্তফাশাহিম লাইন 3 ওয়ার্ডোস্প্যান.সেটস্প্যান (নতুন ফোরগ্রাউন্ড কালারস্প্যান (কালার.আরডি), 50, 80, স্প্যানিয়েবল) পুনরুক্ত করে একাধিক স্প্যান তৈরি করুন;
আশরাফ আলশাহায়ে 5'16

Kotlin + + Spannable স্ট্রিং সমাধান এই মত দেখাবে stackoverflow.com/questions/4032676/...
Dmitrii Leonov

81

এখানে একটি সামান্য সহায়তা ফাংশন। আপনার একাধিক ভাষা থাকার জন্য দুর্দান্ত!

private void setColor(TextView view, String fulltext, String subtext, int color) {
    view.setText(fulltext, TextView.BufferType.SPANNABLE);
    Spannable str = (Spannable) view.getText();
    int i = fulltext.indexOf(subtext);
    str.setSpan(new ForegroundColorSpan(color), i, i + subtext.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

37

একটি নতুন ধারণা বোঝার চেষ্টা করার সময় আমি সবসময় ভিজ্যুয়াল উদাহরণগুলি সহায়ক বলে মনে করি।

পেছনের রং

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

SpannableString spannableString = new SpannableString("Hello World!");
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(backgroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

পুরোভূমি রং

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

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

সমাহার

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

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

আরও অধ্যয়ন


29

আপনি যদি আরও নিয়ন্ত্রণ চান তবে আপনি TextPaintক্লাসটি পরীক্ষা করতে চাইতে পারেন । এটি কীভাবে ব্যবহার করবেন তা এখানে:

final ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(final View textView) {
        //Your onClick code here
    }

    @Override
    public void updateDrawState(final TextPaint textPaint) {
        textPaint.setColor(yourContext.getResources().getColor(R.color.orange));
        textPaint.setUnderlineText(true);
    }
};

getColor (int- আইডি) কে Android 6.0 Marshmallow এ (API এর 23) এ অবচিত stackoverflow.com/questions/31590714/...
Eka থেকে Putra

ক্লিক শ্রোতার সাথে দুর্দান্ত উত্তর
মুহাইমিনুর রহমান

20

আপনার TextViewপাঠ্যকে প্রশংসনীয় সেট করুন এবং ForegroundColorSpanআপনার পাঠ্যের জন্য একটি সংজ্ঞা দিন ।

TextView textView = (TextView)findViewById(R.id.mytextview01);    
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");          
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
textView.setText(wordtoSpan);

ধন্যবাদ! টেক্সটভিউতে প্রথমে পাঠ্যটি বরাদ্দ না করেই কি এটি করা সম্ভব?
hpique

আমি নিজেকে ভালভাবে ব্যাখ্যা করিনি। আমাকে পুনরায় চাপ দিন। প্রথম 3 লাইন কি প্রয়োজনীয়? আপনি স্ট্রিং থেকে স্প্যানিয়েবল অবজেক্টটি সরাসরি তৈরি করতে পারবেন না?
hpique

না, আপনাকে অগ্রভাগের রঙ পরিবর্তন করতে আপনার টেক্সটভিউয়ের পাঠ্যটি একটি বাফার স্প্যানিয়েবলে সংরক্ষণ করতে হবে।
জর্জেসিস

আমি রঙিন প্লাসের সাথে একই জিনিসটি করতে চাই আমি রঙিন অংশ বাদে সবকিছু গা bold় হতে চাই, সেই অংশটি আমি ইটালিক হতে চাই, আমি কীভাবে এটি করতে পারি?
লুকাপ

1
স্প্যান ক্লিক ক্লিক কিভাবে?
habষভ শ্রীবাস্তব

13

কিছু পরিস্থিতিতে ব্যবহার করা যেতে পারে এমন অন্য উপায় হ'ল স্প্যানিয়েবলটি নিচ্ছে এমন বৈশিষ্ট্যের লিঙ্কের রঙ সেট করা।

যদি আপনার স্প্যানিয়েবলটি কোনও টেক্সটভিউতে ব্যবহৃত হতে চলেছে, উদাহরণস্বরূপ, আপনি লিঙ্কের রঙটি এটি এক্সএমএলে সেট করতে পারেন:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColorLink="@color/your_color"
</TextView>

আপনি এটির সাথে কোডটিতেও সেট করতে পারেন:

TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setLinkTextColor(your_color);

5

স্প্যানিয়েবল তৈরি করার জন্য এখানে একটি কারখানা রয়েছে এবং কাস্টটি এড়ানো যেমন:

Spannable span = Spannable.Factory.getInstance().newSpannable("text");

1
আপনি কীভাবে স্প্যানিয়েবলফ্যাক্টরি ব্যবহার করবেন তা পরিষ্কার করতে পারেন? "পাঠ্য" কেমন দেখতে হবে?
পাইওটার

স্প্যানিয়েবল কারখানা দ্বারা স্প্যানিয়েবল তৈরির পরে, কীভাবে এটি ব্যবহার করবেন?
এমবিএইচ

5

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

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

টেক্সটভিউতে পাঠ্য সেট করুন:

txtView.setText(Html.fromHtml(name));

সম্পন্ন


4
String text = "I don't like Hasina.";
textView.setText(spannableString(text, 8, 14));

private SpannableString spannableString(String text, int start, int end) {
    SpannableString spannableString = new SpannableString(text);
    ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{0xffa10901});
    TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);

    spannableString.setSpan(highlightSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new BackgroundColorSpan(0xFFFCFF48), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new RelativeSizeSpan(1.5f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    return spannableString;
}

আউটপুট:

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


আপনি হাসিনাকে পছন্দ করেন না
Abu

3

কেবলমাত্র গৃহীত উত্তরের সাথে যুক্ত করতে, যেমন সমস্ত উত্তরগুলি android.graphics.Colorকেবলমাত্র কথার মতোই বলে থাকে: আমি চাই রঙটি যদি সংজ্ঞায়িত করা হয় তবে res/values/colors.xmlকী হবে?

উদাহরণস্বরূপ, মেটালিয়াল ডিজাইনের রঙগুলি এতে সংজ্ঞায়িত বিবেচনা করুন colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="md_blue_500">#2196F3</color>
</resources>

( android_material_design_colours.xmlআপনার সেরা বন্ধু)

তারপরে ContextCompat.getColor(getContext(), R.color.md_blue_500)আপনি যেখানে ব্যবহার করবেন সেখানে ব্যবহার করুন Color.BLUE, যাতে:

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

হয়ে:

wordtoSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.md_blue_500)), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

যেখানে আমি এটি পেয়েছি:


2

এটির জন্য আমার একটি কোটলিন এক্সটেনশন ফাংশন রয়েছে

    fun TextView.setColouredSpan(word: String, color: Int) {
        val spannableString = SpannableString(text)
        val start = text.indexOf(word)
        val end = text.indexOf(word) + word.length
        try {
            spannableString.setSpan(ForegroundColorSpan(color), start, end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            text = spannableString
        } catch (e: IndexOutOfBoundsException) {
         println("'$word' was not not found in TextView text")
    }
}

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

private val blueberry by lazy { getColor(R.color.blueberry) }

textViewTip.setColouredSpan("Warning", blueberry)

0
  1. আপনার বিন্যাসে পাঠ্যদর্শন তৈরি করুন
  2. এই কোডটি আপনার মূল কার্যকলাপে আটকান

    TextView textview=(TextView)findViewById(R.id.textviewid);
    Spannable spannable=new SpannableString("Hello my name is sunil");
    spannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5, 
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    textview.setText(spannable);
    //Note:- the 0,5 is the size of colour which u want to give the strring
    //0,5 means it give colour to starting from h and ending with space i.e.(hello), if you want to change size and colour u can easily

0

নীচে আমার জন্য পুরোপুরি কাজ করে

    tvPrivacyPolicy = (TextView) findViewById(R.id.tvPrivacyPolicy);
    String originalText = (String)tvPrivacyPolicy.getText();
    int startPosition = 15;
    int endPosition = 31;

    SpannableString spannableStr = new SpannableString(originalText);
    UnderlineSpan underlineSpan = new UnderlineSpan();
    spannableStr.setSpan(underlineSpan, startPosition, endPosition, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

    ForegroundColorSpan backgroundColorSpan = new ForegroundColorSpan(Color.BLUE);
    spannableStr.setSpan(backgroundColorSpan, startPosition, endPosition, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

    StyleSpan styleSpanItalic  = new StyleSpan(Typeface.BOLD);

    spannableStr.setSpan(styleSpanItalic, startPosition, endPosition, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

    tvPrivacyPolicy.setText(spannableStr);

উপরের কোডের জন্য আউটপুট

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


0

এখানে কিছু উত্তর আপ টু ডেট নয়। কারণ, আপনি (বেশিরভাগ ক্ষেত্রে) আপনার লিঙ্কটিতে একটি কাস্টম ক্লিক ক্রিয়া যুক্ত করবেন

ডকুমেন্টেশন সহায়তা দ্বারা সরবরাহিত হিসাবে, আপনার স্প্যানযুক্ত স্ট্রিং লিঙ্ক রঙের একটি ডিফল্ট থাকবে। "ডিফল্ট লিঙ্কের রঙ থিমের অ্যাকসেন্ট রঙ বা অ্যান্ড্রয়েড: টেক্সট কালার লিঙ্ক যদি এই বৈশিষ্ট্যটি থিমটিতে সংজ্ঞায়িত করা হয়"।

নিরাপদে এটি করার উপায় এখানে।

 private class CustomClickableSpan extends ClickableSpan {

    private int color = -1;

    public CustomClickableSpan(){
        super();
        if(getContext() != null) {
            color = ContextCompat.getColor(getContext(), R.color.colorPrimaryDark);
        }
    }

    @Override
    public void updateDrawState(@NonNull TextPaint ds) {
        ds.setColor(color != -1 ? color : ds.linkColor);
        ds.setUnderlineText(true);
    }

    @Override
    public void onClick(@NonNull View widget) {
    }
}

তারপরে এটি ব্যবহার করতে।

   String text = "my text with action";
    hideText= new SpannableString(text);
    hideText.setSpan(new CustomClickableSpan(){

        @Override
        public void onClick(@NonNull View widget) {
            // your action here !
        }

    }, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    yourtextview.setText(hideText);
    // don't forget this ! or this will not work !
    yourtextview.setMovementMethod(LinkMovementMethod.getInstance());

আশা করি এটি দৃ strongly়ভাবে সাহায্য করবে!


0

বিকাশকারী দস্তাবেজগুলি থেকে, একটি স্প্যানিয়েবলের রঙ এবং আকার পরিবর্তন করতে:

1- একটি শ্রেণী তৈরি করুন:

    class RelativeSizeColorSpan(size: Float,@ColorInt private val color: Int): RelativeSizeSpan(size) {

    override fun updateDrawState(textPaint: TextPaint?) {
        super.updateDrawState(textPaint)
        textPaint?.color = color
    } 
}

2 এই শ্রেণিটি ব্যবহার করে আপনার স্প্যানিয়েবল তৈরি করুন:

    val spannable = SpannableStringBuilder(titleNames)
spannable.setSpan(
    RelativeSizeColorSpan(1.5f, Color.CYAN), // Increase size by 50%
    titleNames.length - microbe.name.length, // start
    titleNames.length, // end
    Spannable.SPAN_EXCLUSIVE_INCLUSIVE
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.