Farklı textSize ile TextView


90

Bu, bir TextView'da farklı bir textSize ayarlamak mümkün müdür? Metin stilini şu şekilde değiştirebileceğimi biliyorum:

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

Boyutunu değiştirmek istediğim metnin başlangıç ​​... bitiş aralığını biliyorum. Ama ben ne kadar kullanabilir arg0ve arg3?

Yanıtlar:


201

Deneyin

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

1
Düzgün görünüyor ama çalışmıyor. TextView'daki metnin tamamı her zaman aynı boyutta.
woyaru

1
Hmm belki de setSpan () 'den sonra aralığı TextView'uma uygulamalıyım (güncellemeliyim)?
woyaru

4
3 yorumum için özür dilerim ama bu sorunu çözdüm. Sadece: textView.setText(span).
woyaru

Açıklık için boyutu ve rengi nasıl birleştirebileceğimi biliyor musun?
Ionut Siyah

23

Cevap vermenin çok geç olduğunu biliyorum ama insanlar hala aynı soruyu soruyor olabilir, ben bile bu konuda çok uğraştım. Strings.xml dosyanızın içinde bu iki dizeye sahip olduğunuzu varsayalım

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

Şimdi, style.xml'nizde farklı textSize ile bunlar için iki Style tanımlamanız gerekiyor.

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

Şimdi Java dosyanızdan, bu iki stili ve dizgiyi tek bir textView'a yüklemek için spannable'ı kullanmanız gerekir.

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

Stili uyguladıktan sonra biçimlendirilmiş dizeyi döndürecek formatStyles yöntemi aşağıdadır.

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

13

AbsoluteSizeSpan ile deneyin

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

Tam kod:

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();`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.