Android开发笔记(六)可变字符串
2015-11-24 17:05
441 查看
Andorid的文本显示
在android的TextView控件上显示文本使用setText函数,包括继承自TextView的其他控件如Button、CheckBox、EditText、RadioButton等等,setText之后,我们还可以使用setTextColor设置文本的颜色,使用setTextSize设置文本的大小,使用setTextAlignment设置文本的对齐方式,还可以使用setTextAppearance设置文本的各个属性(包括颜色、大小、风格)。但是这样只能对控件上的所有文本做统一设置,如果我们想对前一段文本加大加粗,对中间一段文本显示红色,再对后面一段文本加超链接,那就要另外想办法了。幸好android为我们提供了可变字符串SpannableString,允许对文本分段显示。SpannableString应用
SpannableString允许对其中一段字串分别设置不同的风格,各种风格的源码在android源码包里的android.text.style居然有三十几个,看来是没法全部掌握了。那还是挑几个常用的来练练手,针对上面说的三段文本分别显示来分别处理。首先创建一个可变字符串
String itemText = "Hello world. " SpannableString spanText = new SpannableString("Hello world. ");
第一段文本改变文字大小采用RelativeSizeSpan,加粗采用StyleSpan,代码如下:
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,代码如下:
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重写一个类
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); }
最后往控件中填入该可变字符串
tv_hello.setText(spanText);
显示效果截图如下
点击这里下载本文可变字符串的例子代码
相关文章推荐
- Android序列帧播放动画(撞钟效果)
- Android 四大组件之 Service
- android 数据库操作使用ormlite框架1
- Android的TextView利用HTML类处理图片显示、字体样式
- 基于RecyclerView-添加上啦加载(AndroidStudio)
- Android开发之获取当前设备的密度值(dp)
- Android开发 模块化编程之引用本地的aar
- android listView功能简介
- 给Activity添加自己需要的方法
- Android控件之AutoCompleteTextView
- Android apk反编译
- 关于AndroidAnnotations取消后台任务的方法
- Android 自动弹出输入框
- GitLab/Git在AndroidStudio上的配置和简单使用
- android谷歌官方自带SwipeRefreshLayout实现下拉刷新
- Android MVP模式
- Android uncovers master-key 漏洞分析
- android开发之线程基础
- Android讯飞语音云语音听写学习
- Android Manifest.xml文件概述