代码之家  ›  专栏  ›  技术社区  ›  wbk727

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

  •  0
  • wbk727  · 技术社区  · 7 年前

    如何将可拉丝放在一根吊带内的两条不同的弦之间?由于在不同语言中读取时文字中的字符长度不同,我不想使用整数作为索引数。

        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 回复  |  直到 7 年前
        1
  •  2
  •   KeLiuyue    7 年前

    试试这个。

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