TextView con diferente tamaño de texto

88

¿Es esto posible establecer diferentes tamaños de texto en un TextView? Sé que puedo cambiar el estilo del texto usando:

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

Sé el inicio del rango ... fin del texto Quiero cambiar el tamaño. Pero, ¿qué puedo usar como arg0y arg3?

woyaru
fuente

Respuestas:

198

Tratar

span.setSpan(new RelativeSizeSpan(0.8f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Michele
fuente
1
Se ve bien pero no funciona. Todo el texto en mi TextView tiene el mismo tamaño todo el tiempo.
woyaru
1
Hmm, ¿quizás debería aplicar (actualizar) el intervalo a mi TextView después de setSpan ()?
woyaru
4
Perdón por mis 3 comentarios, pero he resuelto este problema. Simplemente: textView.setText(span).
woyaru
¿Sabes cómo puedo combinar el tamaño con el color para el lapso?
Ionut Negru
23

Sé que es muy tarde para responder, pero la gente todavía puede tener la misma pregunta. Incluso yo luché mucho en esto. Suponga que tiene estas dos cadenas dentro de su archivo 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>

Ahora necesita definir dos estilos para ellos dentro de su style.xml con diferente tamaño de texto

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

Ahora, desde su archivo Java, debe usar el spannable para cargar estos dos estilos y cadenas en un solo 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);

A continuación se muestra el método formatStyles que devolverá la cadena formateada después de aplicar el estilo

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;
}
Juan
fuente
12

Prueba con AbsoluteSizeSpan

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

El código completo es:

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();`
Simone Dagli Orti
fuente