前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发笔记(六)可变字符串

Android开发笔记(六)可变字符串

作者头像
aqi00
发布2019-01-18 10:40:51
5970
发布2019-01-18 10:40:51
举报
文章被收录于专栏:老欧说安卓老欧说安卓

Andorid的文本显示

在android的TextView控件上显示文本使用setText函数,包括继承自TextView的其他控件如Button、CheckBox、EditText、RadioButton等等,setText之后,我们还可以使用setTextColor设置文本的颜色,使用setTextSize设置文本的大小,使用setTextAlignment设置文本的对齐方式,还可以使用setTextAppearance设置文本的各个属性(包括颜色、大小、风格)。但是这样只能对控件上的所有文本做统一设置,如果我们想对前一段文本加大加粗,对中间一段文本显示红色,再对后面一段文本加超链接,那就要另外想办法了。幸好android为我们提供了可变字符串SpannableString,允许对文本分段显示。

SpannableString应用

SpannableString允许对其中一段字串分别设置不同的风格,各种风格的源码在android源码包里的android.text.style居然有三十几个,看来是没法全部掌握了。那还是挑几个常用的来练练手,针对上面说的三段文本分别显示来分别处理。   首先创建一个可变字符串

代码语言:javascript
复制
String itemText = "Hello world. "
SpannableString spanText = new SpannableString("Hello world. ");

  第一段文本改变文字大小采用RelativeSizeSpan,加粗采用StyleSpan,代码如下:

代码语言:javascript
复制
		spanText.setSpan(new RelativeSizeSpan(1.5f) , 0, first_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		spanText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, first_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

上面setSpan第一个参数代表设置的风格对象,第二个参数代表该段文本的起始位置,第三个参数代表该段文本的结束位置,第四个参数用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果(主要对EditText有用)。分别有SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、SPAN_INCLUSIVE_INCLUSIVE(前后都包括)。   第二段文本改变文字大小也采用RelativeSizeSpan,改变颜色采用ForegroundColorSpan,代码如下:

代码语言:javascript
复制
		spanText.setSpan(new RelativeSizeSpan(0.75f), first_length+1, second_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		spanText.setSpan(new ForegroundColorSpan(Color.RED), first_length+1, second_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

  第三段代码加超链接稍微复杂些,因为要显示超链的下划线,并且在点击时还要跳转到指定的url地址,这里我们要继承URLSpan重写一个类

代码语言:javascript
复制
	private static class MyURLSpan extends URLSpan {
		public MyURLSpan(String url) {
			super(url);
		}


		@Override
		public void onClick(View widget) {
			System.out.println("MyURLSpan onClick");
			String url = "http://blog.csdn.net/aqi00";
			wv_go.loadUrl(url);
			wv_go.requestFocus();
			wv_go.setWebViewClient(new WebViewClient());
			return;
		}
	}


		String str_url = "Let's go.";
		Spannable sp = (Spannable) Html.fromHtml("<a href=\"\">"+str_url+"</a>");
		CharSequence text = sp.toString();
		URLSpan[] urls = sp.getSpans(0, text.length(), URLSpan.class);
		for (URLSpan url : urls) {
			MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
			spanText.setSpan(myURLSpan, second_length+1, itemText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		}

最后往控件中填入该可变字符串

代码语言:javascript
复制
tv_hello.setText(spanText);

显示效果截图如下

点击这里下载本文可变字符串的例子代码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年11月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Andorid的文本显示
  • SpannableString应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档