现在的位置: 首页 > 综合 > 正文

android中TextView的SpannableString小结

2017年12月10日 ⁄ 综合 ⁄ 共 3193字 ⁄ 字号 评论关闭

我们使用QQ,微信的时候,会发现:其文本样式多种多样,可以在TextView中显示表情,图片,超链接等等。今天就来大致总结一下相关的样式。

先看代码:

/**
		 * 设置前景色
		 * @param tv
		 */
		private void setForegroundColorSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("前景色textview");  
		    ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);  
		    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		}  
		
		/**
		 * 设置背景色
		 * @param tv
		 */
		private void setBackgroundColorSpan(TextView  tv) {  
		    SpannableString spanString = new SpannableString("背景色textview");  
		    BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);  
		    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		} 
		/**
		 * 设置粗体样式
		 * @param tv
		 */
		private void setStyleSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("粗体斜体textview");  
		    StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);  
		    spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		}  
		/**
		 * 设置字体大小
		 * @param tv
		 */
		private void setRelativeFontSpan(TextView tv) {
			SpannableString spanString = new SpannableString("字体相对大小textview");
			spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
			tv.append(spanString);    
		}
		/**
		 * 设置文本字体
		 * @param tv
		 */
		private void setTypefaceSpan(TextView tv) {
			SpannableString spanString = new SpannableString("文本字体textview");
			spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
			tv.append(spanString);
		}
		/**
		 * 添加URL超链接
		 * @param tv
		 */
		private void addUrlSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("csdntextview");  
		    URLSpan span = new URLSpan("http://blog.csdn.net/nuptboyzhb");  
		    spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);
		    tv.setMovementMethod(LinkMovementMethod.getInstance());
		}  
		/**
		 * 在文字中显示图片表情等
		 * @param tv
		 */
		private void addImageSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("文中有图片表情等textview");  
		    Drawable d = getResources().getDrawable(R.drawable.ic_launcher);  
		    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());  
		    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);  
		    spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		} 
		/**
		 * 点击后跳转Activity
		 * @param textView
		 * @param packageContext
		 * @param cls
		 */
		private void clickableSpan(TextView textView,final Context packageContext,final Class<?> cls){
			String text = "显示Activity";
			SpannableString spannableString = new SpannableString(text);
			spannableString.setSpan(new ClickableSpan() {
				@Override
				public void onClick(View widget) {
					Intent intent = new Intent(packageContext,cls);
					startActivity(intent);
				}
				// 表示点击整个text的长度都有效触发这个事件
			}, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
			textView.setText(spannableString);
			textView.setMovementMethod(LinkMovementMethod.getInstance());
		}
		/**
		 * 添加下划线
		 * @param tv
		 */
		private void addUnderLineSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("下划线textview");  
		    UnderlineSpan span = new UnderlineSpan();  
		    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		} 
		/**
		 * 添加删除线样式
		 * @param tv
		 */
		private void addStrikeSpan(TextView tv) {  
		    SpannableString spanString = new SpannableString("删除线textview");  
		    StrikethroughSpan span = new StrikethroughSpan();  
		    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
		    tv.append(spanString);  
		}  

效果截图:



更多样式,参见官方文档。

http://developer.android.com/reference/android/text/style/package-summary.html

抱歉!评论已关闭.