zoukankan      html  css  js  c++  java
  • 一起学android之怎样设置TextView中不同字段的字体颜色(22)

    在这里先看看效果图:



    OK,有时候,在我们的项目中会要求TextView中文本有一部分的字体颜色不一样。这时我们应该使用


    SpannableStringBuilder这个工具类,当然这个类的功能非常强大,这里我仅仅是实现上面的样式。其他的不做介绍。


    SpannableStringBuilder的实现接口是Spannable这个接口,而Spannable终于都实现了CharSequence,因此我们直


    接能够通过TextView.setText()来进行设置。


    以下给出实现代码:

    public class StringFormatUtil {
    	private SpannableStringBuilder spBuilder;
    	private String wholeStr, highlightStr;
    	private Context mContext;
    	private int color;
    	private int start = 0, end = 0;
    	
    	
    	/**
    	 * 
    	 * @param context
    	 * @param wholeStr 所有文字
    	 * @param highlightStr 改变颜色的文字
    	 * @param color 颜色
    	 */
    	public StringFormatUtil(Context context,String wholeStr,String highlightStr,int color){
    		this.mContext=context;
    		this.wholeStr=wholeStr;
    		this.highlightStr=highlightStr;
    		this.color=color;
    		
    		
    	}
    	
    	
    	public StringFormatUtil fillColor(){
    		if(!TextUtils.isEmpty(wholeStr)&&!TextUtils.isEmpty(highlightStr)){
    			if(wholeStr.contains(highlightStr)){
    				/*
    				 *  返回highlightStr字符串wholeStr字符串中第一次出现处的索引。
    				 */
    				start=wholeStr.indexOf(highlightStr);
    				end=start+highlightStr.length();
    			}else{
    				return null;
    			}
    		}else{
    			return null;
    		}
    		spBuilder=new SpannableStringBuilder(wholeStr);
    		color=mContext.getResources().getColor(color);
    		CharacterStyle charaStyle=new ForegroundColorSpan(color);
    		spBuilder.setSpan(charaStyle, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    		return this;
    	}
    	
    	
    	public SpannableStringBuilder getResult(){
    		if (spBuilder != null) {
    			return spBuilder;
    		}
    		return null;
    	}
    }

    当然上面的第一步是获取你要改变颜色的文字的起始位置到结束位置,接着通过SpannableStringBuilder来改变文字

    的颜色。


    public class MainActivity extends Activity {
    	private TextView tv_show;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		initView();
    	}
    
    	private void initView() {
    		tv_show = (TextView) findViewById(R.id.tv_show);
    		String wholeStr = "想要改变后面的颜色这是要改变的颜色";
    		StringFormatUtil spanStr = new StringFormatUtil(this, wholeStr,
    				"这是要改变的颜色", R.color.blue).fillColor();
    		tv_show.setText(spanStr.getResult());
    	}
    
    }



    转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/44225955 情绪控_

  • 相关阅读:
    图的应用详解-数据结构
    图的遍历
    node.js基础模块http、网页分析工具cherrio实现爬虫
    NodeJS制作爬虫全过程
    Nodejs爬虫进阶教程之异步并发控制
    asp.net的临时文件夹
    Cms WebSite 编译非常慢
    查看数据库的表被谁锁住了,以及如何解锁
    WinRar 设置默认的压缩格式为zip
    Can not Stop-Computer in powershell 6.0
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7229849.html
Copyright © 2011-2022 走看看