উত্তর:
অন্য উত্তরটি খুব অনুরূপ হতে পারে তবে 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);
কিছু পরিস্থিতিতে ব্যবহার করা যেতে পারে এমন অন্য উপায় হ'ল স্প্যানিয়েবলটি নিচ্ছে এমন বৈশিষ্ট্যের লিঙ্কের রঙ সেট করা।
যদি আপনার স্প্যানিয়েবলটি কোনও টেক্সটভিউতে ব্যবহৃত হতে চলেছে, উদাহরণস্বরূপ, আপনি লিঙ্কের রঙটি এটি এক্সএমএলে সেট করতে পারেন:
<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 span = Spannable.Factory.getInstance().newSpannable("text");
সেট রঙ উপর লেখা দ্বারা স্ট্রিং ক্ষণস্থায়ী এবং রঙ :
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));
সম্পন্ন
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)
এই কোডটি আপনার মূল কার্যকলাপে আটকান
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);
উপরের কোডের জন্য আউটপুট
এখানে কিছু উত্তর আপ টু ডেট নয়। কারণ, আপনি (বেশিরভাগ ক্ষেত্রে) আপনার লিঙ্কটিতে একটি কাস্টম ক্লিক ক্রিয়া যুক্ত করবেন ।
ডকুমেন্টেশন সহায়তা দ্বারা সরবরাহিত হিসাবে, আপনার স্প্যানযুক্ত স্ট্রিং লিঙ্ক রঙের একটি ডিফল্ট থাকবে। "ডিফল্ট লিঙ্কের রঙ থিমের অ্যাকসেন্ট রঙ বা অ্যান্ড্রয়েড: টেক্সট কালার লিঙ্ক যদি এই বৈশিষ্ট্যটি থিমটিতে সংজ্ঞায়িত করা হয়"।
নিরাপদে এটি করার উপায় এখানে।
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়ভাবে সাহায্য করবে!
বিকাশকারী দস্তাবেজগুলি থেকে, একটি স্প্যানিয়েবলের রঙ এবং আকার পরিবর্তন করতে:
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
)