0

Comment un dessin peut-il être placé entre deux chaînes différentes dans un SpannableString? En raison de la longueur variable des caractères dans les mots lus dans différentes langues, je ne veux pas utiliser d'entiers pour les numéros d'index.Comment faire pour positionner entre 2 ressources de chaîne dans SpannableStringBuilder sans utiliser le numéro d'index

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

Pourriez-vous vouloir laisser votre drawable en entre 'bonjour world'? – KeLiuyue

+0

Salut MacaronLover, pourriez-vous vérifier ma réponse? – KeLiuyue

Répondre

1

Essayez ceci.

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

Remarque

C'est la longueur de String.

int length = getString(R.string.hello).length(); 
    int length2 = getString(R.string.world).length(); 
    int lengthSum = ssb.length(); 
  • Si getString(R.string.hello) était à gauche. Vous pouvez l'utiliser.

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

Une autre façon

  • Vous pouvez l'utiliser.

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

Fonctionne parfaitement. Merci beaucoup. :-) – MacaronLover

+0

Bonne chance. Je suis heureux de vous aider. – KeLiuyue