简体   繁体   中英

Bold Text in TextView does not work with combination of Spanned and String

I have this code

TextView text1 = (TextView) view.findViewById(R.layout.myLayout);
Spanned myBold = (Html.fromHtml("<b>Test<b>", Html.FROM_HTML_MODE_LEGACY));

If I do

text1.setText(myBold);

Then myBold is in bold,which is ok. But when I want to add a string more, like

text1.setText(myBold+"bla");

Then the whole TextView is not bold anymore. Why does the new String "bla" affect this?

Thanks.

Why does the new String "bla" affect this?

Because what you are really doing is:

text1.setText(myBold.toString() + "bla");

A String has no style information. A Spanned object does.

Use TextUtils.concat() instead:

text1.setText(TextUtils.concat(myBold, "bla"));

A better choice would be to use a Bold StyleSpan . In the next sample only the "hello" world will be set to bold by using such technique:

Java:

final SpannableString caption = new SpannableString("hello world");

// Set to bold from index 0 to the length of 'hello'
caption.setSpan(new StyleSpan(Typeface.BOLD), 0, "hello".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

yourTextView.setText(caption);
     

Kotlin:

yourTextView.text = SpannableString("hello world").apply {
        // Set to bold from index 0 to the length of 'hello'
        setSpan(StyleSpan(Typeface.BOLD), 0, "hello".length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE))
    }
       

This would be a more optimal solution rather than using the Html.fromHtml technicque, as it doesn't have to go through the overhead of parsing/interpreting the HTML tags. In addition, it allows you to combine more styles, sizes, etc, in the same SpannableString .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM