TextView với các textSize khác nhau


88

Điều này có thể đặt các kích thước textS khác nhau trong một TextView không? Tôi biết rằng tôi có thể thay đổi kiểu văn bản bằng cách sử dụng:

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

Tôi biết phạm vi bắt đầu ... kết thúc của văn bản mà tôi muốn thay đổi kích thước. Nhưng những gì tôi có thể sử dụng như arg0arg3?

Câu trả lời:


198

Thử

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

1
Nó trông đúng nhưng không hoạt động. Toàn bộ văn bản trong TextView của tôi luôn có cùng kích thước.
woyaru

1
Hmm có lẽ tôi nên áp dụng (cập nhật) khoảng thời gian cho TextView của mình sau setSpan ()?
woyaru

4
Xin lỗi vì 3 nhận xét của tôi nhưng tôi đã giải quyết được vấn đề này. Chỉ cần: textView.setText(span).
woyaru

bạn có biết làm thế nào tôi có thể kết hợp kích thước với màu sắc cho khoảng không?
Ionut Negru

23

Tôi biết rất muộn để trả lời nhưng mọi người vẫn có thể có cùng một câu hỏi. Ngay cả khi tôi đã đấu tranh rất nhiều về điều này. Giả sử bạn có hai chuỗi này bên trong tệp string.xml của mình

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

Bây giờ bạn cần xác định hai Style cho chúng bên trong style.xml của bạn với các textSize khác nhau

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

Bây giờ từ tệp Java của bạn, bạn cần sử dụng spannable để tải hai kiểu và chuỗi này trên một 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);

Dưới đây là phương thức formatStyles sẽ trả về chuỗi được định dạng sau khi áp dụng kiểu

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

12

Thử với AbsoluteSizeSpan

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

Mã hoàn chỉnh là:

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();`
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.