应用开发中有时候会遇到对文本替换与改变文本颜色的情况,可以通过字符串拼接的方式处理这种情况,这种方式会比较繁琐,且会引入过多的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);
//方法一:
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型代替:
二:android string.xml文件中的整型和string型代替:
- <PRE class=html name="code">//字符串替换方法:
- TextView textView3 = (TextView) findViewById(R.id.text3);
- String text3 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风");
- textView3.setText(text3);</PRE><BR>
- <BR>
- <P></P>
- <PRE></PRE>
- <SPAN style="TEXT-ALIGN: left; LINE-HEIGHT: 20px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; COLOR: rgb(102,102,102); FONT-SIZE: 14px">对应的string.xml文件参数:</SPAN>
- <P></P>
- <P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; MARGIN-TOP: 0px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; MARGIN-BOTTOM: 0.5em; COLOR: rgb(102,102,102); FONT-SIZE: 14px; PADDING-TOP: 0px">
- <PRE class=html name="code"><string name="wether">天气预报:白天最低%1$d度,最高%2$d度。夜晚伴有%3$s!</string></PRE><SPAN style="TEXT-ALIGN: left; LINE-HEIGHT: 20px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; COLOR: rgb(102,102,102); FONT-SIZE: 14px">%1$d表示为第一个整型,以此类推;</SPAN><P></P>
- <P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; MARGIN-TOP: 0px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; MARGIN-BOTTOM: 0.5em; COLOR: rgb(102,102,102); FONT-SIZE: 14px; PADDING-TOP: 0px">
- <SPAN style="TEXT-ALIGN: left; LINE-HEIGHT: 20px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; COLOR: rgb(102,102,102); FONT-SIZE: 14px">在项目开发者,经常需要把以上两者结合起来使用。可以避免很多textview的拼接,如下所示:</SPAN></P>
- <P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; MARGIN-TOP: 0px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; MARGIN-BOTTOM: 0.5em; COLOR: rgb(102,102,102); FONT-SIZE: 14px; PADDING-TOP: 0px">
- <PRE class=html name="code">//将颜色替换与字符串替换两者结合
- 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);</PRE><BR>
- <SPAN style="TEXT-ALIGN: left; LINE-HEIGHT: 20px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; COLOR: rgb(102,102,102); FONT-SIZE: 14px">贴上全部代码供大家参考:</SPAN><P></P>
- <P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; MARGIN-TOP: 0px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; MARGIN-BOTTOM: 0.5em; COLOR: rgb(102,102,102); FONT-SIZE: 14px; PADDING-TOP: 0px">
- <PRE class=html name="code">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);
- }
- }</PRE><BR>
- <SPAN style="TEXT-ALIGN: left; LINE-HEIGHT: 20px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; COLOR: rgb(102,102,102); FONT-SIZE: 14px">XML文件</SPAN><P></P>
- <P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; MARGIN-TOP: 0px; FONT-FAMILY: 'Microsoft Yahei', Georgia, 'Times New Roman', Times, STHeiti, serif; MARGIN-BOTTOM: 0.5em; COLOR: rgb(102,102,102); FONT-SIZE: 14px; PADDING-TOP: 0px">
- <PRE class=html name="code"><?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></PRE><BR>
- 来源<A href="http://iandroiddev.com/post/2012-05-29/40026712669">http://iandroiddev.com/post/2012-05-29/40026712669</A><BR>
- <BR>
- <P></P>