给TextView设置Span

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

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);
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值