Issue
How can a drawable be placed in-between 2 different strings within a SpannableString? Due to varying character lengths in words when read in different languages, I don't want to use integers for index numbers.
TextView txt1 = new TextView(getActivity());
txt1.setTransformationMethod(null);
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(getString(R.string.hello));
ssb.append(" ");
ssb.append(" ");
ssb.append(getString(R.string.world));
Drawable d1 = ContextCompat.getDrawable(getContext(), R.drawable.ic_arrows_leftandright_black);
d1.setBounds(0, 0, d1.getIntrinsicWidth(), d1.getIntrinsicHeight());
ImageSpan span1 = new ImageSpan(d1, ImageSpan.ALIGN_BASELINE);
ssb.setSpan(span1, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
txt1.setTextColor(Color.BLACK);
txt1.setText(ssb);
Solution
Try this.
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(getString(R.string.hello));
ssb.append(" ");
ssb.append(" ");
ssb.append(getString(R.string.world));
// edited here , add length
int length = getString(R.string.hello).length();
Drawable d1 = ContextCompat.getDrawable(getContext(), R.drawable.ic_arrows_leftandright_black);
d1.setBounds(0, 0, d1.getIntrinsicWidth(), d1.getIntrinsicHeight());
ImageSpan span1 = new ImageSpan(d1, ImageSpan.ALIGN_BASELINE);
// edited here , add length to it
ssb.setSpan(span1, length, length + 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Note
This is the length of String
.
int length = getString(R.string.hello).length();
int length2 = getString(R.string.world).length();
int lengthSum = ssb.length();
If
getString(R.string.hello)
was on the left. You can use this.ssb.setSpan(span1, length, length + 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Another way
You can use this.
ssb.setSpan(span1, lengthSum - length2 - 2, lengthSum - length2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Answered By - KeLiuyue
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.