仅以编程方式更改textview中某些文本的背景颜色

时间:2015-07-11 20:31:58

标签: java android xml textview

如何只使用尽可能少的代码行以编程方式更改视图中某些文本的背景?我试图在html中使用背景标记,但遗憾的是它不支持,因此有没有可能的解决方法来实现类似下面的图像?

XML

<TextView
    android:id="@+id/main_textView0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@android:style/TextAppearance.Medium"/>

爪哇

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    View v = getView();

    TextView txt = (TextView)v.findViewById(R.id.main_textView0);
    txt.setText(Html.fromHtml("<font color='#0099CC'>" + getResources().getString(R.string.hello) + "</font>" +
                    " " +
                    "<font color='#000000'>" + getResources().getString(R.string.world) + "</font>"
    ));

    super.onActivityCreated(savedInstanceState);
}

enter image description here

2 个答案:

答案 0 :(得分:5)

尝试Spannable,例如:

            String str1 = "Hello";
            String str2 = "world";
            String message = str1 + " " + str2;

            Spannable spannable = new SpannableString(message);
            spannable.setSpan(new ForegroundColorSpan(Color.BLUE),0, str1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            textView.setText(spannable);

答案 1 :(得分:0)

您的代码是从UI线程中调用的(应该​​是这样)但是对 Html.fromHtml(...)的调用非常昂贵。 您可以通过在LinearLayout中将几个TextView包装在一起并分别设置每个TextView来做得更好。它在初看起来可能看起来不太好但是更容易维护和保存cpu。 特别是如果你打算使用它,那就是回收者的观点。