Textansicht mit unterschiedlicher Textgröße

88

Ist es möglich, in einer Textansicht unterschiedliche Textgrößen festzulegen? Ich weiß, dass ich den Textstil ändern kann, indem ich:

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

Ich kenne den Bereich Anfang ... Ende des Textes Ich möchte die Größe ändern. Aber was kann ich als arg0und verwenden arg3?

Woyaru
quelle

Antworten:

198

Versuchen

span.setSpan(new RelativeSizeSpan(0.8f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Michele
quelle
1
Es sieht richtig aus, funktioniert aber nicht. Der gesamte Text in meiner Textansicht hat immer die gleiche Größe.
Woyaru
1
Hmm, vielleicht sollte ich die Spanne nach setSpan () auf meine Textansicht anwenden (aktualisieren)?
Woyaru
4
Entschuldigung für meine 3 Kommentare, aber ich habe dieses Problem behoben. Nur : textView.setText(span).
Woyaru
Wissen Sie, wie ich Größe mit Farbe für die Spannweite kombinieren kann?
Ionut Negru
23

Ich weiß sehr spät zu antworten, aber die Leute haben vielleicht immer noch die gleiche Frage. Selbst ich hatte große Probleme damit. Angenommen, Sie haben diese beiden Zeichenfolgen in Ihrer Datei 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>

Sie müssen jetzt zwei Stile für sie in Ihrer style.xml mit unterschiedlicher Textgröße definieren

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

Jetzt müssen Sie aus Ihrer Java-Datei die Spannable verwenden, um diese beiden Stile und Zeichenfolgen in eine einzelne Textansicht zu laden

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

Unten finden Sie die formatStyles-Methode, die nach dem Anwenden des Stils die formatierte Zeichenfolge zurückgibt

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;
}
John
quelle
12

Versuchen Sie es mit AbsoluteSizeSpan

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

Der vollständige Code lautet:

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
quelle