Android应用开发之(字符串替换与文本颜色改变方案)

应用开发中有时候会遇到对文本替换与改变文本颜色的情况,可以通过字符串拼接的方式处理这种情况,这种方式会比较繁琐,且会引入过多的TextView,今天与大家分享一种简单高效的解决方案。


一:TextView组件改变部分文字的颜色:

  1. //方法一:    
  2. TextView textView1 = (TextView) findViewById(R.id.text1);  
  3. textView1.setText(Html.fromHtml("<font color=\"#ff0000\">红色</font>其它颜色"));  
  4.                                         
  5. //方法二:    
  6. TextView textView2 = (TextView) findViewById(R.id.text2);  
  7. String text = "获得银宝箱!";  
  8. SpannableStringBuilder style = new SpannableStringBuilder(text);  
  9. style.setSpan(new BackgroundColorSpan(Color.RED), 2, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的背景颜色    
  10. style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色    
  11. 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);
  1. 二:android string.xml文件中的整型和string型代替:  
二:android string.xml文件中的整型和string型代替:
  1. <PRE class=html name="code">//字符串替换方法:  
  2. TextView textView3 = (TextView) findViewById(R.id.text3);  
  3. String text3 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风");  
  4. textView3.setText(text3);</PRE><BR>  
  5. <BR>  
  6. <P></P>  
  7. <PRE></PRE>  
  8. <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>  
  9. <P></P>  
  10. <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">  
  11. <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>  
  12. <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">  
  13. <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>  
  14. <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">  
  15. <PRE class=html name="code">//将颜色替换与字符串替换两者结合  
  16.         TextView textView4 = (TextView) findViewById(R.id.text4);  
  17.         String text4 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风");  
  18.         int index[] = new int[3];  
  19.         index[0] = text4.indexOf("18");  
  20.         index[1] = text4.indexOf("30");  
  21.         index[2] = text4.indexOf("雷雨大风");  
  22.                                    
  23.         SpannableStringBuilder style2 = new SpannableStringBuilder(text4);  
  24.         style2.setSpan(new ForegroundColorSpan(Color.RED), index[0], index[0] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  25.         style2.setSpan(new ForegroundColorSpan(Color.GREEN), index[1], index[1] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  26.         style2.setSpan(new BackgroundColorSpan(Color.YELLOW), index[2], index[2] + 3,  
  27.                 Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  28.         textView4.setText(style2);</PRE><BR>  
  29. <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>  
  30. <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">  
  31. <PRE class=html name="code">public class TextViewColor extends Activity {  
  32.                                  
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.                                  
  37.         setContentView(R.layout.textview_color);  
  38.                                  
  39.         //改变字体颜色  
  40.         //方法一:    
  41.         TextView textView1 = (TextView) findViewById(R.id.text1);  
  42.         textView1.setText(Html.fromHtml("<font color=\"#ff0000\">红色</font>其它颜色"));  
  43.                                  
  44.         //方法二:    
  45.         TextView textView2 = (TextView) findViewById(R.id.text2);  
  46.         String text = "获得银宝箱!";  
  47.         SpannableStringBuilder style = new SpannableStringBuilder(text);  
  48.         style.setSpan(new BackgroundColorSpan(Color.RED), 2, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的背景颜色    
  49.         style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色    
  50.         textView2.setText(style);  
  51.                                  
  52.         //字符串替换方法:  
  53.         TextView textView3 = (TextView) findViewById(R.id.text3);  
  54.         String text3 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风");  
  55.         textView3.setText(text3);  
  56.                                  
  57.         //将颜色替换与字符串替换两者结合  
  58.         TextView textView4 = (TextView) findViewById(R.id.text4);  
  59.         String text4 = String.format(getResources().getString(R.string.wether), 18, 30, "雷雨大风");  
  60.         int index[] = new int[3];  
  61.         index[0] = text4.indexOf("18");  
  62.         index[1] = text4.indexOf("30");  
  63.         index[2] = text4.indexOf("雷雨大风");  
  64.                                  
  65.         SpannableStringBuilder style2 = new SpannableStringBuilder(text4);  
  66.         style2.setSpan(new ForegroundColorSpan(Color.RED), index[0], index[0] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  67.         style2.setSpan(new ForegroundColorSpan(Color.GREEN), index[1], index[1] + 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  68.         style2.setSpan(new BackgroundColorSpan(Color.YELLOW), index[2], index[2] + 3,  
  69.                 Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  70.         textView4.setText(style2);  
  71.     }  
  72. }</PRE><BR>  
  73. <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>  
  74. <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">  
  75. <PRE class=html name="code"><?xml version="1.0" encoding="utf-8"?>  
  76. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  77.     android:layout_width="fill_parent"  
  78.     android:layout_height="fill_parent"  
  79.     android:gravity="left"  
  80.     android:orientation="vertical" >  
  81.                                 
  82.     <TextView  
  83.         android:id="@+id/text1"  
  84.         android:layout_width="wrap_content"  
  85.         android:layout_height="wrap_content" />  
  86.     <TextView  
  87.         android:id="@+id/text2"  
  88.         android:layout_width="wrap_content"  
  89.         android:layout_height="wrap_content" />  
  90.     <TextView  
  91.         android:id="@+id/text3"  
  92.         android:layout_width="wrap_content"  
  93.         android:layout_height="wrap_content" />  
  94.     <TextView  
  95.         android:id="@+id/text4"  
  96.         android:layout_width="wrap_content"  
  97.         android:layout_height="wrap_content" />  
  98.                                 
  99. </LinearLayout></PRE><BR>  
  100. 来源<A href="http://iandroiddev.com/post/2012-05-29/40026712669">http://iandroiddev.com/post/2012-05-29/40026712669</A><BR>  
  101. <BR>  
  102. <P></P>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值