it-swarm.it

TextView con diverso textSize

È possibile impostare textSize diversi in un TextView? So che posso cambiare lo stile del testo usando:

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

So che l'intervallo inizia ... fine del testo Voglio cambiare dimensione. Ma cosa posso usare come arg0 e arg3?

80
woyaru

Provare

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

So molto tardi per rispondere, ma le persone potrebbero ancora avere la stessa domanda, anche se ho faticato molto su questo. Supponiamo di avere queste due stringhe nel file 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>

Ora devi definire due Style per loro all'interno del tuo style.xml con textSize diverso

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

Ora dal tuo Java devi usare lo spannable per caricare questi due stili e stringhe su un singolo 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);

Di seguito è riportato il metodo formatStyles che restituirà la stringa formattata dopo aver applicato lo stile

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

Prova con AbsoluteSizeSpan

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

Il codice completo è:

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