I want to set a spannable
string in my text view when a button is clicked, where the first word has white foreground color and striked out and the second word has red foreground color. This is my code:
My textview:
<TextView
android:id="@ id/charge_per_month"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16pt">
</TextView>
My java code:
TextView charge_month = findViewById(R.id.charge_per_month);
String exp_amount = "₹ 5600"; //should be white in color and striked out
String act_amount = "₹ 6708"; //should be red in color
String complete_string = exp_amount " " act_amount;
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Spannable str = new SpannableString (complete_string);
str.setSpan(new StrikethroughSpan(), 0, exp_amount.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(Color.WHITE),0, exp_amount.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(Color.RED),exp_amount.indexOf(exp_amount.charAt(0)),act_amount.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
charge_month.setText(str);
}
}
The spannable string just shows for a split second, when the button is clicked. How do I fix this?
CodePudding user response:
Try This
TextView charge_month = findViewById(R.id.charge_per_month);
String exp_amount = "₹ 5600";
String act_amount = "₹ 6708";
String complete_string = exp_amount " " act_amount;
Spannable str = new SpannableString(complete_string);
str.setSpan(new StrikethroughSpan(), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(Color.WHITE),0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(Color.RED),2, act_amount.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
charge_month.setText(str);
CodePudding user response:
change this from:
str.setSpan(new ForegroundColorSpan(Color.RED),exp_amount.indexOf(exp_amount.charAt(0)),act_amount.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
to
str.setSpan(new ForegroundColorSpan(Color.RED),exp_amount.length() 1,complete_string.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);