如何在android中的同一文本视图中使用粗体和普通文本?

G.O*_*ONE 13 android spannablestring

我搜索了互联网并尝试了以下代码,但它无法正常工作

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");
Run Code Online (Sandbox Code Playgroud)

我希望输出像这样 健康:

strhealth = good但是它出来了健康:好的是什么错误?

我正在使用android studio 2.1.1

小智 15

 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);
Run Code Online (Sandbox Code Playgroud)

  • 最好不要硬编码8的长度,而应使用txt1.length()代替。 (2认同)

Hen*_*nry 7

最简单的方法是

textview1.setText(Html.fromHtml("<b>Health:</b> good"));
Run Code Online (Sandbox Code Playgroud)

您的代码中的错误是在此处使用字符串连接:"\n"+ss1+strhealth+"\n\n"这会删除所有格式,因为组件被视为普通字符串.


小智 6

在 kotlin 中,你可以做到这一点。我用它来加粗字符串中的字符/单词。例如:

item = "菲律宾"

查询 = "菲尔"

导致=菲尔ippines

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)
Run Code Online (Sandbox Code Playgroud)

并像这样使用它

textView.text = spannable
Run Code Online (Sandbox Code Playgroud)


Uma*_*Ata 5

我来晚了,但是我通过使用此处已经提供的答案创建了一种易于使用的方法。

    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);
}
Run Code Online (Sandbox Code Playgroud)