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

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

String ss1 = getString(R.string.health_status, strhealth);

Ответ 5

В kotlin вы можете сделать это. Я использовал это, чтобы выделить символы/слова в строке. Например:

item = "Филиппины"

query = "Фил"

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

    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

Ответ 6


Ниже я упомянул код, через который вы можете создать 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)

Ответ 7

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