как иметь жирный и обычный текст в одном и том же текстовом представлении в 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");

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

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

Я использую андроид-студию 2.1.1.


person G.ONE    schedule 06.06.2016    source источник


Ответы (7)


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

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

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

person Henry    schedule 06.06.2016
comment
Работает здесь, что именно вы пробовали? - person Henry; 06.06.2016
comment
если я не объединяю, то как я могу поместить переменную и многократный текст в одно текстовое представление - person G.ONE; 07.06.2016
comment
Я пробовал textview1.setText(Html.fromHtml(‹b›Health:‹/b›)+strhealth+\n\n); но выход по-прежнему не имеет здоровья: выделен жирным шрифтом - person G.ONE; 07.06.2016
comment
Та же проблема, что и в вашей первоначальной попытке. Используйте это: textview1.setText(Html.fromHtml("<b>Health:</b>"+strhealth+"\n\n")); - person Henry; 07.06.2016
comment
спасибо, это работает, но теперь мне нужно использовать html для форматирования всего в текстовом представлении. Теперь свойства текстового представления, например. центр не работает - person G.ONE; 07.06.2016

В котлине это можно сделать. Я использовал это для выделения жирным шрифтом символов/слов внутри строки. Например:

пункт = "Филиппины"

запрос = "Фил"

результат = Филиппинс

val spannable = SpannableString(item)
val indexStart = item.indexOf(query)
val indexEnd = indexStart + query.length
spannable.setSpan(StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

и использовать его так

textView.text = spannable
person Jennine Jessirene Jacobe    schedule 15.04.2019

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

    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);
}
person Umar Ata    schedule 07.09.2018

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

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

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

String ss1 = getString(R.string.health_status, strhealth);
person Zachary McKenney    schedule 06.06.2016


Ниже я упомянул код, с помощью которого вы можете создать spannableString в Kotlin.

val spannableStringBuilder = SpannableStringBuilder()

val boldSpan: StyleSpan = StyleSpan(Typeface.BOLD)

sp_text.setSpan(boldSpan, firstIndex, lastIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

sp_text.setSpan(clickableSpan, firstIndex, lastIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            sp_text.setSpan(ForegroundColorSpan(ContextCompat.getColor(mContext, R.color.colorPrimary)), firstIndex, lastIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
person Ashok Songara    schedule 19.09.2019

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

person theyouishere    schedule 06.06.2016
comment
Иногда вам нужно обработать одну строку, поэтому потребуется больше работы, чтобы разделить строки на соответствующие текстовые представления. Так почему бы не поразить двух зайцев одним выстрелом, когда это возможно. - person Ivan Leong; 05.07.2018

person    schedule
comment
Было бы лучше не жестко кодировать длину 8, а вместо этого использовать txt1.length(). - person ka3ak; 27.01.2019