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



运行效果







发布了486 篇原创文章 · 获赞 405 · 访问量 294万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览