给TextView设置Span

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。

 

package com.home.util;

import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;

public class TextViewUtil {

	private static final String MARK = "\u3000";

	/**
	 * 设置首行缩进n个字符
	 * 
	 * @param textView
	 *            文本框
	 * @param num
	 *            缩进个数
	 * @param text
	 *            文本内容
	 */
	public static void setIndent(TextView textView, int num, String text) {
		String first = "";
		for (int i = 0; i < num; i++) {
			first = first + MARK;
		}
		textView.setText(first + text);
	}

	/**
	 * 设置部分文本字体颜色值
	 * 
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 * @param colorId
	 *            颜色值ID
	 */
	public static void setPartTextColor(TextView textView, String text,
			int start, int end, int colorId) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new ForegroundColorSpan(colorId), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

	/**
	 * 设置部分文本背景颜色值
	 * 
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 * @param colorId
	 *            颜色值ID
	 */
	public static void setPartBackgroundColor(TextView textView, String text,
			int start, int end, int colorId) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new BackgroundColorSpan(colorId), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

	/**
	 * 设置部分文本大小
	 * 
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 * @param size
	 *            字体绝对值大小
	 */
	public static void setPartTextSize(TextView textView, String text,
			int start, int end, int size) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new AbsoluteSizeSpan(size), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

	/**
	 * 设置图片
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param bitmapText
	 *            图片的文本标示
	 * @param resId
	 *            图片资源id
	 */
	public static void setImage(Context context, TextView textView,
			String bitmapText, int resId) {
		ImageSpan imageSpan = new ImageSpan(context, resId);
		SpannableString ss = new SpannableString(bitmapText);
		ss.setSpan(imageSpan, 0, bitmapText.length(),
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.append(ss);
	}

	/**
	 * 设置图片(指定同样的宽和高)
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param bitmapText
	 *            图片的文本标示
	 * @param resId
	 *            图片资源id
	 * @param size
	 *            设置显示的图片尺寸
	 */
	public static void setImage(Context context, TextView textView,
			String bitmapText, int resId, int size) {
		SpannableString ss = new SpannableString(bitmapText);
		Drawable drawable = context.getResources().getDrawable(resId);
		drawable.setBounds(0, 0, size, size);// 这里设置图片的大小
		ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
		ss.setSpan(imageSpan, 0, bitmapText.length(),
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.append(ss);
	}

	/**
	 * 设置图片(指定宽和高)
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param bitmapText
	 *            图片的文本标示
	 * @param resId
	 *            图片资源id
	 * @param width
	 *            显示的宽
	 * @param height
	 *            显示的高
	 */
	public static void setImage(Context context, TextView textView,
			String bitmapText, int resId, int width, int height) {
		SpannableString ss = new SpannableString(bitmapText);
		Drawable drawable = context.getResources().getDrawable(resId);
		drawable.setBounds(0, 0, width, height);
		ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
		ss.setSpan(imageSpan, 0, bitmapText.length(),
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.append(ss);
	}

	/**
	 * 设置部分文本字体风格
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 * @param style
	 *            字体风格(Typeface的枚举)
	 */
	public static void setPartTypeface(Context context, TextView textView,
			String text, int start, int end, int style) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new StyleSpan(style), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

	/**
	 * 将部分文本设置为粗体
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 */
	public static void setPartBold(Context context, TextView textView,
			String text, int start, int end) {
		setPartTypeface(context, textView, text, start, end, Typeface.BOLD);
	}

	/**
	 * 将部分文本设置为斜体
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 */
	public static void setPartItalic(Context context, TextView textView,
			String text, int start, int end) {
		setPartTypeface(context, textView, text, start, end, Typeface.ITALIC);
	}

	/**
	 * 将部分文本设置为粗斜体
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 */
	public static void setPartBoldAndItalic(Context context, TextView textView,
			String text, int start, int end) {
		setPartTypeface(context, textView, text, start, end,
				Typeface.BOLD_ITALIC);
	}

	/**
	 * 设置部分文本删除线
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 */
	public static void setPartStrikethrough(Context context, TextView textView,
			String text, int start, int end) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new StrikethroughSpan(), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

	/**
	 * 设置部分文本下划线
	 * 
	 * @param context
	 *            上下文对象
	 * @param textView
	 *            文本框
	 * @param text
	 *            文本内容
	 * @param start
	 *            设置的文本起点
	 * @param end
	 *            设置的文本终点
	 */
	public static void setPartUnderLine(Context context, TextView textView,
			String text, int start, int end) {
		SpannableString ss = new SpannableString(text);
		ss.setSpan(new UnderlineSpan(), start, end,
				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		textView.setText(ss);
	}

}

 

你可能感兴趣的:(Android)