जवाबों:
एक और उत्तर बहुत समान होगा, लेकिन 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);
यहाँ थोड़ा मदद समारोह है। जब आपके पास कई भाषाएँ हों तो बढ़िया!
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);
}
मैं हमेशा एक नई अवधारणा को समझने की कोशिश करते समय दृश्य उदाहरणों को मददगार पाता हूं।
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);
यदि आप अधिक नियंत्रण चाहते हैं, तो आप 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);
}
};
अपने 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);
एक और तरीका जो कुछ स्थितियों में इस्तेमाल किया जा सकता है, वह स्पैनबल लेने वाले दृश्य के गुणों में लिंक रंग सेट करना है।
यदि आपके Spannable का उपयोग टेक्स्ट व्यू में किया जा रहा है, उदाहरण के लिए, आप XML में लिंक का रंग इस तरह सेट कर सकते हैं:
<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);
Spannable बनाने के लिए एक कारखाना है, और इस तरह कलाकारों से बचें:
Spannable span = Spannable.Factory.getInstance().newSpannable("text");
स्ट्रिंग और रंग पास करके टेक्स्ट पर रंग सेट करें :
private String getColoredSpanned(String text, String color) {
String input = "<font color=" + color + ">" + text + "</font>";
return input;
}
नीचे दिए गए कोड से टेक्स्टव्यू / बटन / एडिट टेक्स्ट आदि पर टेक्स्ट सेट करें :
व्याख्यान दर्शन:
TextView txtView = (TextView)findViewById(R.id.txtView);
रंगीन स्ट्रिंग प्राप्त करें:
String name = getColoredSpanned("Hiren", "#800000");
TextView पर पाठ सेट करें:
txtView.setText(Html.fromHtml(name));
किया हुआ
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;
}
आउटपुट:
बस स्वीकृत उत्तर को जोड़ने के लिए, जैसा कि सभी उत्तर 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);
जहाँ मैंने पाया कि:
इसके लिए मेरे पास एक कोटलिन एक्सटेंशन फंक्शन है
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)
इस कोड को ur MainActivity में पेस्ट करें
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
नीचे मेरे लिए पूरी तरह से काम करता है
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);
उपरोक्त कोड के लिए आउटपुट
यहाँ कुछ जवाब अप टू डेट नहीं हैं। क्योंकि, आप (ज्यादातर मामलों में) अपने लिंक पर एक कस्टम क्लिक कार्रवाई जोड़ देंगे ।
इसके अलावा, जैसा कि प्रलेखन मदद द्वारा प्रदान किया गया है, आपके स्पेंड किए गए स्ट्रिंग लिंक रंग में एक डिफ़ॉल्ट होगा। "डिफ़ॉल्ट लिंक रंग थीम का उच्चारण रंग या Android है: textColorLink यदि यह विशेषता थीम में परिभाषित है"।
यहाँ यह सुरक्षित तरीके से करने का तरीका है।
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());
आशा है कि यह दृढ़ता से मदद करेगा!
डेवलपर डॉक्स से, स्पैनबल के रंग और आकार को बदलने के लिए:
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
)