当前位置:   article > 正文

我的Android进阶之旅------> Android为TextView组件中显示的文本添加背景色

android text后加带背景的标签

通过上一篇文章

我的Android进阶之旅------> Android在TextView中显示图片方法

(地址:http://blog.csdn.net/ouyang_peng/article/details/46916963)

     我们学会了在TextView中显示图片的方法,现在我们来学习如何为TextView组件中显示的文本添加背景色。要求完成的样子如图所示:


首先来学习使用BackgroundColorSpan对象设置文字背景色,代码如下:

  1. TextView textView=(TextView) findViewById(R.id.myTextView);
  2. //要显示的字符串
  3. String text="带背景色的文字";
  4. //将字符串转换为SpannableString对象
  5. SpannableString spannableString=new SpannableString(text);
  6. //确定要设置的字符串的start和end
  7. int start=0;
  8. int end=7;
  9. //创建BackgroundColorSpan对象,指定背景色为黄色
  10. BackgroundColorSpan backgroundColorSpan=new BackgroundColorSpan(Color.YELLOW);
  11. //使用setSpan方法将指定字符串转换成BackgroundColorSpan对象
  12. spannableString.setSpan(backgroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  13. //用SpannableString对象设置TextView
  14. textView.setText(spannableString);

BackgroundColorSpan只能设置文字的背景色,为了更加通用,自定义一个ColorSpan类,可以同时设置文字颜色和背景色,代码如下:

  1. package com.oyp.edittext;
  2. import android.text.TextPaint;
  3. import android.text.style.CharacterStyle;
  4. public class ColorSpan extends CharacterStyle {
  5. private int mTextColor;
  6. private int mBackgroundColor;
  7. public ColorSpan(int textColor,int backgroundColor){
  8. mTextColor=textColor;
  9. mBackgroundColor=backgroundColor;
  10. }
  11. //覆盖CharacterStyle类的updateDrawState方法
  12. //并在该方法中设置了文字和背景颜色
  13. @Override
  14. public void updateDrawState(TextPaint tp) {
  15. tp.bgColor=mBackgroundColor;
  16. tp.setColor(mTextColor);
  17. }
  18. }

在ColorSpan类中实现了CharacterStyle的updateDrawState方法。该方法在系统开始绘制要设置样式的字符串之前调用,以便修改绘制文字的属性,例如:文字颜色、背景颜色等。其中TextPaint是Paint的子类。Paint类用于描述绘制的属性,如画笔的颜色、画笔的粗细等。现在我们同事使用BackgroundColorSpan和ColorSpan类设置文字和背景颜色,代码如下:

  1. package com.oyp.edittext;
  2. import android.os.Bundle;
  3. import android.text.Spannable;
  4. import android.text.SpannableString;
  5. import android.text.style.BackgroundColorSpan;
  6. import android.widget.TextView;
  7. import android.app.Activity;
  8. import android.graphics.Color;
  9. public class MainActivity extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.oyp);
  14. TextView textView=(TextView) findViewById(R.id.myTextView);
  15. //要显示的字符串
  16. String text="<没有背景><黄色背景>\n\n<蓝色背景,红色文字>";
  17. //将字符串转换为SpannableString对象
  18. SpannableString spannableString=new SpannableString(text);
  19. //确定要设置的字符串的start和end
  20. int start=6;
  21. int end=12;
  22. //创建BackgroundColorSpan对象,指定背景色为黄色
  23. BackgroundColorSpan backgroundColorSpan=new BackgroundColorSpan(Color.YELLOW);
  24. //使用setSpan方法将指定字符串转换成BackgroundColorSpan对象
  25. spannableString.setSpan(backgroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  26. /**
  27. * <蓝色背景,红色文字> 子字符串的开始位置(没一个"\n"算一个长度)
  28. * 由于该子字符串再原字符串的最好,因此,end对于字符串的长度,也就是text.length()
  29. */
  30. start=14;
  31. //创建ColorSpan对象
  32. ColorSpan colorSpan=new ColorSpan(Color.RED, Color.BLUE);
  33. //将指定文字转换成ColorSpan对象
  34. spannableString.setSpan(colorSpan, start, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  35. //用SpannableString对象设置TextView
  36. textView.setText(spannableString);
  37. }
  38. }

oyp.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:id="@+id/myTextView"
  14. />
  15. </RelativeLayout>


程序运行效果如下图所示:




 



                            ====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

====================================================================================

 


本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/293736
推荐阅读
相关标签
  

闽ICP备14008679号