应用开发中有时候会遇到对文本替换与改变文本颜色的情况,可以通过字符串拼接的方式处理这种情况,这种方式会比较繁琐,且会引入过多的TextView,今天与大家分享一种简单高效的解决方案。
一:TextView组件改变部分文字的颜色:
//方法一:
TextView textView1 = (TextView) findViewById(R.id.text1);
textView1.setText(Html.fromHtml("<font color=\"#ff0000\">红色</font>其它颜色"));
//方法二:
TextView textView2 = (TextView) findViewById(R.id.text2);
String text = "获得银宝箱!";
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.setSpan(new BackgroundColorSpan(Color.RED), 2, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的背景颜色
style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色
textView2.setText(style);
二:android string.xml文件中的整型和string型代替:
//字符串替换方法: TextView textView3 = (TextView) findViewById(R.id.text3); String text3 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风"); textView3.setText(text3);
对应的string.xml文件参数:
%1$d表示为第一个整型,以此类推;<string name="wether">天气预报:白天最低%1$d度,最高%2$d度。夜晚伴有%3$s!</string>
在项目开发者,经常需要把以上两者结合起来使用。可以避免很多textview的拼接,如下所示:
//将颜色替换与字符串替换两者结合 TextView textView4 = (TextView) findViewById(R.id.text4); String text4 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风"); int index[] = new int[3]; index[0] = text4.indexOf("18"); index[1] = text4.indexOf("30"); index[2] = text4.indexOf("雷雨大风"); SpannableStringBuilder style2 = new SpannableStringBuilder(text4); style2.setSpan(new ForegroundColorSpan(Color.RED), index[0], index[0] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); style2.setSpan(new ForegroundColorSpan(Color.GREEN), index[1], index[1] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); style2.setSpan(new BackgroundColorSpan(Color.YELLOW), index[2], index[2] + 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); textView4.setText(style2);
贴上全部代码供大家参考:
public class TextViewColor extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.textview_color); //改变字体颜色 //方法一: TextView textView1 = (TextView) findViewById(R.id.text1); textView1.setText(Html.fromHtml("<font color=\"#ff0000\">红色</font>其它颜色")); //方法二: TextView textView2 = (TextView) findViewById(R.id.text2); String text = "获得银宝箱!"; SpannableStringBuilder style = new SpannableStringBuilder(text); style.setSpan(new BackgroundColorSpan(Color.RED), 2, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的背景颜色 style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色 textView2.setText(style); //字符串替换方法: TextView textView3 = (TextView) findViewById(R.id.text3); String text3 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风"); textView3.setText(text3); //将颜色替换与字符串替换两者结合 TextView textView4 = (TextView) findViewById(R.id.text4); String text4 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风"); int index[] = new int[3]; index[0] = text4.indexOf("18"); index[1] = text4.indexOf("30"); index[2] = text4.indexOf("雷雨大风"); SpannableStringBuilder style2 = new SpannableStringBuilder(text4); style2.setSpan(new ForegroundColorSpan(Color.RED), index[0], index[0] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); style2.setSpan(new ForegroundColorSpan(Color.GREEN), index[1], index[1] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); style2.setSpan(new BackgroundColorSpan(Color.YELLOW), index[2], index[2] + 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); textView4.setText(style2); } }
XML文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text4" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
来源http://iandroiddev.com/post/2012-05-29/40026712669