在textview中构build一个粗体string的一部分

为什么下面的代码不工作? 它在Toast中工作,但不在TextView中工作。 当我运行我的程序时,boldName不会显示为粗体,但当设置为Toast时,它显示为粗体。 有没有人有任何其他解决scheme?

String boldName = "<b>" + name + "</b>"; Spanned conBold = Html.fromHtml(boldName); chosen_contact.setText("You have chosen " + conBold + " as your contact."); 

Solutions Collecting From Web of "在textview中构build一个粗体string的一部分"

我真的不确定为什么TextViews的行为方式就像你在做的那样粗体,但是只有当整个TextView是粗体的,但是如果只有一部分是粗体的,在那里的其他string。

但是,这个代码将为你工作:

 // a SpannableStringBuilder containing text to display SpannableStringBuilder sb = new SpannableStringBuilder("You have chosen " + name + " as your contact."); // create a bold StyleSpan to be used on the SpannableStringBuilder StyleSpan b = new StyleSpan(android.graphics.Typeface.BOLD); // Span to make text bold // set only the name part of the SpannableStringBuilder to be bold --> 16, 16 + name.length() sb.setSpan(b, 16, 16 + name.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make first 4 characters Bold chosen_contact.setText(sb); // set the TextView to be the SpannableStringBuilder 

你可以使用SpannableStringBuilder,因为它实现了spannable和CharSequence,你也可以做任何事情跟随

 TextView txtTest = (TextView) findViewById(R.id.txt); String text = "This is an example"; final SpannableStringBuilder str = new SpannableStringBuilder(text); str.setSpan(new TypefaceSpan("monospace"), 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new TypefaceSpan("serif"), 9, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.white)), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.grey)), 6, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); txtTest.setText(str); 

我在值中添加了colors.xml

 <color name="black">#000000</color> <color name="grey">#DCDCDC</color> <color name="white">#FFFFFF</color>