как иметь жирный и обычный текст в том же текстовом представлении в Android?

Я искал в Интернете и попробовал следующий код, но он не работает

SpannableString ss1 = new SpannableString("Health: ");
           ss1.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, ss1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            textview1.setText("\n"+ss1+strhealth+"\n\n");

я хочу, чтобы результат был такимЗдоровье: хорошо

где strhealth = хорошо Но оно выходит Здоровье: хорошо В чем ошибка?

Я использую Android Studio 2.1.1

Ответы на вопрос(5)

что вы должны использовать 2 различных textView, метку и один для данных. это обычная и хорошая практика

 Ivan Leong05 июл. 2018 г., 17:25
Иногда вам нужно обработать одну строку, поэтому потребуется больше работы для разделения строк на соответствующие текстовые представления. Так почему бы не ударить двух зайцев одним выстрелом, когда это возможно.
 String txt1="Health: ";
 SpannableString txtSpannable= new SpannableString(txt1);
 StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
 txtSpannable.setSpan(boldSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

 builder.append(txtSpannable);

 String txt2="good";
 builder.append(txt2);

 textview1.lblStatus.setText(builder, TextView.BufferType.SPANNABLE);
 ka3ak27 янв. 2019 г., 07:54
Было бы лучше не жестко кодировать длину 8, а вместо этого использовать txt1.length ().

но я создал метод для легкого использования, используя ответ, уже предоставленный здесь.

    private void setSpanString(String string1, String string2, TextView textView) {
    SpannableStringBuilder builder=new SpannableStringBuilder();
    SpannableString txtSpannable= new SpannableString(string1);
    StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
    txtSpannable.setSpan(boldSpan, 0, string1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    builder.append(txtSpannable);
    builder.append(string2);
   textView.setText(builder, TextView.BufferType.SPANNABLE);
}

Самый простой способ

textview1.setText(Html.fromHtml("<b>Health:</b> good"));

Ошибка в вашем коде заключается в использовании здесь конкатенации строк:"\n"+ss1+strhealth+"\n\n" который удаляет все форматирование, потому что компоненты взяты как нормальные строки.

 Henry07 июн. 2016 г., 06:27
Та же проблема, что и в вашей оригинальной попытке. Использовать этот:textview1.setText(Html.fromHtml("<b>Health:</b>"+strhealth+"\n\n"));
 G.ONE07 июн. 2016 г., 05:49
если я не объединяю, то как я могу поместить переменный и множественный текст в одном текстовом представлении
 G.ONE06 июн. 2016 г., 18:14
Я попробовал это, но это не работает
 G.ONE07 июн. 2016 г., 17:05
спасибо, что работает, но теперь я должен использовать HTML для форматирования всего в текстовом представлении. Теперь свойства текстового представления, например. центр не работает
 G.ONE07 июн. 2016 г., 06:12
Я пытался textview1.setText (Html.fromHtml ("<b> Health: </ b>") + strhealth + "\ n \ n"); но на выходе все еще нет здоровья: как жирный
 Henry06 июн. 2016 г., 20:53
Работает здесь, что именно вы пробовали?

Я бы использовал строковый ресурс, такой как этот:

<string name="health_status"><b>Health:</b> %1$s</string>

Если вы хотите установить состояние здоровья, просто используйте этот код:

String ss1 = getString(R.string.health_status, strhealth);
 abalta15 февр. 2018 г., 14:48
Это не работа.

Ваш ответ на вопрос