web-dev-qa-db-fra.com

TextView avec différents textSize

Est-il possible de définir différents textSize dans un TextView? Je sais que je peux changer le style du texte en utilisant:

TextView textView = (TextView) findViewById(R.id.textView);
Spannable span = new SpannableString(textView.getText());
span.setSpan(arg0, 1, 10, arg3);
textView.setText(span)

Je connais le début de la plage ... fin du texte, je veux changer de taille. Mais que puis-je utiliser comme arg0 et arg3?

80
woyaru

Essayer

span.setSpan(new RelativeSizeSpan(0.8f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
185
Michele

Je sais très tard pour répondre, mais les gens sont toujours susceptibles de se poser la même question. Supposons que vous ayez ces deux chaînes dans votre fichier strings.xml

 <string name="my_text">You will need a to complete this Assembly</string>
 <string name="text_sub1">screwdriver, hammer, and measuring tape</string>

Vous devez maintenant définir deux styles pour eux dans votre style.xml avec textSize différent.

<style name="style0">
    <item name="Android:textSize">19sp</item>
    <item name="Android:textColor">@color/standout_text</item>
    <item name="Android:textStyle">bold</item>
</style>
<style name="style1">
    <item name="Android:textSize">23sp</item>
    <item name="Android:textColor">@color/standout_light_text</item>
    <item name="Android:textStyle">italic</item>
</style>

Maintenant, à partir de votre fichier Java, vous devez utiliser le spannable pour charger ces deux styles et ces chaînes sur un seul textView

SpannableString formattedSpan = formatStyles(getString(R.string.my_text), getString(R.string.text_sub0), R.style.style0, getString(R.string.main_text_sub1), R.style.style1);
textView.setText(formattedSpan, TextView.BufferType.SPANNABLE);

Ci-dessous, la méthode formatStyles qui retournera la chaîne mise en forme après l’application du style.

private SpannableString formatStyles(String value, String sub0, int style0, String sub1, int style1)
{ 
    String tag0 = "{0}";
    int startLocation0 = value.indexOf(tag0);
    value = value.replace(tag0, sub0);

    String tag1 = "{1}";
    int startLocation1 = value.indexOf(tag1);
    if (sub1 != null && !sub1.equals(""))
    { 
        value = value.replace(tag1, sub1);
    } 
    SpannableString styledText = new SpannableString(value);
    styledText.setSpan(new TextAppearanceSpan(getActivity(), style0), startLocation0, startLocation0 + sub0.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    if (sub1 != null && !sub1.equals(""))
    { 
        styledText.setSpan(new TextAppearanceSpan(getActivity(), style1), startLocation1, startLocation1 + sub1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    } 

    return styledText;
}
19
John

Essayez avec AbsoluteSizeSpan

snackbarText.setSpan(new AbsoluteSizeSpan(fontsize, true), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Le code complet est:

SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Your text");
snackbarText.setSpan(new AbsoluteSizeSpan(fontsize, true), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Snackbar.make(getCurrentFocus(), snackbarText, Snackbar.LENGTH_LONG).setAction("Action", null).show();`
8
Simone Dagli Orti