Android TextView 设置超链接、关键字高亮等效果

之前做TextView关键字高亮效果,使用的是Html.fromHtml(String source)方法,然后通过TextView的setText(CharSequence text)方法来显示




后来测试此方法在部分手机上显示有问题,如Nexus4,华为P6等等。于是乎只能继续寻找别的解决办法了,在这里Mark一下。

这里用到了SpannableString类



使用 SpannableString.setSpan(Object what, int start, int end, int flags)方法



1、创建超链接

/**
	 * 创建一个超链接
	 */
	private void createLink() {
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("百度手机卫士");
		// 设置超链接
		sp.setSpan(new URLSpan("http://www.baidu.com"), 0, 2,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		
		tv_content1.setText(sp);
		//设置TextView可点击  
		tv_content1.setMovementMethod(LinkMovementMethod.getInstance());  
	}


2、高亮某一段文字的背景

//高亮背景颜色
	private void backgroundHight(){
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("祝大家新年快乐");
		//设置背景颜色
		sp.setSpan(new BackgroundColorSpan(Color.RED), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		tv_content2.setText(sp);
		//设置TextView可点击  
		tv_content2.setMovementMethod(LinkMovementMethod.getInstance());  
	}


3、高亮某段文字

//高亮字体颜色
	private void foregroundHight(){
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("祝大家新年快乐");
		//设置背景颜色
		sp.setSpan(new ForegroundColorSpan(Color.parseColor("#ff6600")), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
//		sp.setSpan(new ForegroundColorSpan(Color.YELLOW), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		tv_content3.setText(sp);
		//设置TextView可点击  
		tv_content3.setMovementMethod(LinkMovementMethod.getInstance());  
	}


4、设置斜体

//斜体
	private void boldItalicHight(){
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("新年快乐天天开心 哈哈哈哈哈哈");
//		SpannableString sp = new SpannableString("Happy New Year 天天开心 哈哈哈哈哈哈");
		//设置背景颜色
		sp.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 6 ,10,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		tv_content4.setText(sp);
		//设置TextView可点击  
		tv_content4.setMovementMethod(LinkMovementMethod.getInstance());  
	}


这里设置的斜体只对 英文起作用,汉字没有斜体效果,如果有人知道原因,麻烦在下面回复我一下,谢谢!

5、设置下划线

//下划线
	private void underLineHight(){
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("祝大家新年快乐");
		//设置背景颜色
		sp.setSpan(new UnderlineSpan(), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		tv_content5.setText(sp);
		//设置TextView可点击  
		tv_content5.setMovementMethod(LinkMovementMethod.getInstance());  
	}


6、设置中划线

//中划线
	private void strikethroughHight(){
		// 创建一个 SpannableString对象
		SpannableString sp = new SpannableString("祝大家新年快乐");
		//设置背景颜色
        sp.setSpan(new StrikethroughSpan(), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv_content6.setText(sp);
		//设置TextView可点击  
        tv_content6.setMovementMethod(LinkMovementMethod.getInstance());  
	}


7、高亮一段文字中指定的全部关键字

/**
	 * 高亮某个关键字,如果有多个则全部高亮
	 */
	private void highlightKeyword() {
		
		String str = "KTV风暴KTV";
		SpannableString sp = new SpannableString(str);
		
		Pattern p = Pattern.compile("KTV");
		Matcher m = p.matcher(str);

		while (m.find()) {	//通过正则查找,逐个高亮
			int start = m.start();
			int end = m.end();
			sp.setSpan(new ForegroundColorSpan(Color.parseColor("#ff6600")), start ,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		}
		tv_content7.setText(sp);
	}



运行效果







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值