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

应用开发中有时候会遇到对文本替换与改变文本颜色的情况,可以通过字符串拼接的方式处理这种情况,这种方式会比较繁琐,且会引入过多的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文件参数:

<string name="wether">天气预报:白天最低%1$d度,最高%2$d度。夜晚伴有%3$s!</string>
%1$d表示为第一个整型,以此类推;

在项目开发者,经常需要把以上两者结合起来使用。可以避免很多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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值