如何在不使用索引号的情况下在SpannableStringBuilder中定位2个字符串资源之间的drawable

时间:2017-08-18 23:52:25

标签: java android textview android-drawable spannablestring

如何将drawable放在SpannableString中的2个不同字符串之间?由于在使用不同语言读取时,单词中的字符长度不同,我不想将整数用于索引号。

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

1 个答案:

答案 0 :(得分:2)

试试这个。

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

注意

这是String的长度。

    int length = getString(R.string.hello).length();
    int length2 = getString(R.string.world).length();
    int lengthSum = ssb.length();
  • 如果getString(R.string.hello)位于左侧。     你可以用它。

    ssb.setSpan(span1, length, length + 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    

另一种方式

  • 您可以使用此功能。

    ssb.setSpan(span1, lengthSum - length2 - 2, lengthSum - length2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);