Android开发之TextView高级应用
Android开发之TextView高级应用
我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此。以下就和大家分享一下TextView的一些使用技巧。
Android中设置文本样式的几种方法:
1.将android:autoLink属性值设为true。
系统会自己主动识别E-mail、电话、网址等特殊文本。
2.使用Html标签,比如。<font>、<img>等。
不要设置
android:autoLink 属性。
3.在Java代码中直接使用Span对象来设置文本样式。
这样的方法须要将文本转换成一个SpannableString或SpannableStringBuilder对象,然后在SpannableString或SpannableStringBuilder对象中使用setSpan方法将要设置样式的文本转换成对应的Span对象。
4.在字符串资源中使用<a>标签(仅仅支持<a>标签)设置可单击的链接。不要设置android:audoLink属性。
上面4种方法仅仅要涉及单击动作,就必须使用TextView.setMovementMethod方法设置对应的MovementMethod对象。
1.在TextView中显示图像
我们浏览网的时候,上面的有非常多图文并茂的文章,这些文章大部分都是从server的数据库中取出并显示在网页上的。
那么怎样在网页上显示图文并茂的文章呢?有过Java Web或.NET开发经验的人,会说用s:textfield或asp:label绑定。用它们是由于它们能够将<img>标签的src相应的图像地址(也是图像资源的唯一标识)直接交给浏览器出处理。
这样就能够将<img/>的src相应的图片显示出来。
那么,在Android中怎样用TextView显示图片呢?
在解析Html标签来方面Android系统没有浏览器那么强大,Android系统不会直接依据src属性说指向的的值自己主动获取并显示图片。这一切都须要我们来帮它来完毕。
说白了。src属性指的是什么仅仅有开发人员自己知道。开发人员须要告诉系统src属性究竟指的是什么,然后系统才会知道怎么做。
解析src属性值须要ImageGetter对象的getDrawable方法来完毕。ImageGetter是一个接口。
使用Html.fromHtml会使这一过程变得简单。(关于Html.fromHtml的介绍)
txtShow=(TextView)findViewById(R.id.txtShow); String htmlText=号:<img txtShow.setText(getSpanned(htmlText)); |
/** *将Html解析成样式文本 *@return * */ private Spanned getSpanned(String htmlText) { //TODO Spanned spanned=Html.fromHtml(htmlText,new public //TODO //装在图像资源 Drawable drawable=getResources().getDrawable(getResourceId(source)); if //设置图像的缩放 drawable.setBounds(0, 0, 56, 56); }elseif //设置图像的缩放 drawable.setBounds(0, 0, 36, 36); }elseif //设置图像缩放到原来的75% drawable.setBounds(0, 0,(int) (int) } return } },null); return } /** *利用反射技术从R.drawable类中通过图像资源文件名称获得对应图像资源的ID *@param *@return图像资源ID * */ protectedint //TODO try //依据资源ID的变量名(也就是图像资源的文件名称)获取Field对象 Field field=R.drawable.class.getField(name); //取得并返回资源ID的值 return }catch //TODO: } return } |
2.单击TextView中的内容打开指定Activity
尽管TextView能够自己主动识别特殊文本(网址、电话号、E-mail等),并能够通过单击触发不同的动作。可是假设开发人员想通过单击链接来显示指定的组件(如Activity、Service等)那么怎么来实现呢?
TextView自己主动识别的网址、电话号、E-mail等。都是在ClickableSpan类的onClick方法中通过Action调用对应的组件来实现的。如今我们就採用类似的方法,通过自己实现onClick方法来达到自己定义自己定义单击动作的目的。
/** *单击TextView中的内容启动指定组件 * */ privatevoid //TODO txtLink=(TextView)findViewById(R.id.txtLink); String str="单击我启动一个Activity"; //将文本转换成SpannableString对象 SpannableString spannableString=new //将spannableString全部文本设置成ClickableSpan对象。并实现onClick方法 spannableString.setSpan(new @Override publicvoid //TODO //启动指定Activity Intent intent=new startActivity(intent); } }, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); txtLink.setText(spannableString); //在单击链接时凡是要运行的动作。都必须设置MovementMethod对象 txtLink.setMovementMethod(LinkMovementMethod.getInstance()); } |
实例分析:
在本例中setSpan方法的第四个參数设置成了Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,该标志在
TextView 控件中意义不大,但在 EditText控件中表示在当前Span效果的前后输入字符时并不应用Span的效果。关于SpannableString的具体介绍大家能够參照:Android开发之SpannableString具体解释。
3.为指定文本加入颜色和背景色
从前面几个实例的内容能够得知设置字符中某个子字符串的样式(变成可单击的链接、设置字体等)须要例如以下几步。
(1) 将字符串转换成SpannableString或SpannableStringBuilder对象。
(2) 获得要设置样式的子字符串在原字符串中的開始位置和子字符串后面的字符的位置,也就是
start和end。
(3) 创建一个Span对象(全部android.text.style包中的XxxSpan类创建的对象的统称,Xxx表示URL、BackgroundColor等类的前缀)。
(4) 使用setSpan方法设置个Span对象,也就足说•将要设置样式的子字符串转换成坤拙对象。
(5) 用处理完的SpannableString或SpannableStringBuilder对象设置对应的控件(如TextView、EditText、Button等)。
在Android SDK的andrmd.text.styte包中提供非常多现成的Span对象,比如’
BackgroundColorSpan类就是一个非经常常使用的Span类。该类的功能是设置指定字符串的背景色,用法例如以下:
txtSetBackgroundColor=(TextView)findViewById(R.id.txtSetBackgroundColor); String str="没有背景|黄色背景"; //第一步将字符串转换成SpannableString对象 SpannableString spannableString=new //第二步确定设置要设置的子字符串在原字符串的開始位置和接收位置即start和end String subStr="黄色背景"; int start=str.indexOf(subStr); int end=start+subStr.length(); //第三步创建一个BackgroundColorSpan对象 BackgroundColorSpan backgroundColorSpan=new //第四步使用setSpan方法将指定子字符串转换成BackgroundColorSpan对象对象 spannableString.setSpan(backgroundColorSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第五步用SpannableString对象设置TextView控件 txtSetBackgroundColor.setText(spannableString); |
BackgroundColorSpan仅仅能设置文字的背景色。为了更加通用。我们来自己编写一个ColorSpan类。使其同一时候能够设置文字颜色和背景色(android.text.style.ForegroundColorSpan类能够设置文字颜色,但并没有可同一时候设置背景和文字颜色的Span类)。在实例2给出了一个通过继承ClickableSpan类来编写自己定义Span类的样例。只是这个样例须要处理链接动作,所以必须要继承ClickableSpan类。而本例仅仅要设置文字和背景颜色就可以,并不须要处理不论什么动作,因此,仅仅须要从CharacterStyle类继承就可以。实际上,ClickableSpan也是CharacterStyle的子类。能够设置文字和背景颜色的ColorSpan类的代码例如以下:
/** * Describe:</br> *</br>自己定义一个CharacterStyle的子类 *</br>用于改动文字的颜色和背景色 *</br>@author jph *</br>Date:2014.08.10 * */ publicclass //声明文字的颜色和背景色 privateinttextColor,backgroundColor; /** *初始化ColorSpan类 *@param *@param * */ public //TODO this.textColor=textColor; this.backgroundColor=backgroundColor; } //覆盖CharacterStyle类中的updateDrawState方法。并在该方法中设置字体颜色和背景色 @Override publicvoid //TODO tp.bgColor=backgroundColor; tp.setColor(textColor); } } |
在ColorSpan类中实现了CharacterStyle类的updateDrawState方法。该方法在系统開始绘制要设置样式的字符串之前调用,以便改动绘制文字的属性,比如。文字颜色、背景颜色等。当中TextPaint是Paint的子类。Paint类用于描写叙述绘制的属性,如画笔的颜色、画笔的粗细等。如今我们来同一时候使用BackgroundColorSpan和ColorSpan类设置文字和背景颜色。代码例如以下:
txtMyColor=(TextView)findViewById(R.id.txtMyColor); ColorSpan colorSpan=new String str="红色字体|灰色背景"; String subStr="灰色背景"; int int SpannableString spannableString=new spannableString.setSpan(colorSpan, 0, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); colorSpan=new spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); txtMyColor.setText(spannableString); |
Android开发之TextView高级应用的更多相关文章
- Android开发之TextView实现跑马灯效果
TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符:省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中). 其实现只需在x ...
- Android开发之TextView的下划线添加
如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...
- Android开发之TextView排版问题
下面直接是关于解决该问题的代码(根据别人的代码进行了修正以及测试,保证可以修改字体尺寸.颜色.根据padding调整,如果需要支持其他的格式可以将对应的属性添加至Paint类型的对象中): 1 p ...
- Android开发之TextView中间设置横线,适用于电商项目,商品原价之类的功能。
textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); //中间横线 textview.getPaint().setFlags(Pai ...
- Android开发之SpannableString具体解释
在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之PopupWindow
/* * Android开发之PopupWindow * * Created on: 2011-8-8 * Author: blueeagle * Email: liujiaxiang@g ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
- android开发之Animations的使用(二)
android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...
随机推荐
- 实现单例模式C++版本
还是先看最简单的C++单例模式 class CSingleton { private: CSingleton(){} static CSingleton *pInstance; public: sta ...
- php phalcon
1. 准备所需工具 1) php环境 浏览 2) phalcon插件 浏览 2. 安装phalcon 将php_phalcon.dll拷贝到%PHP_HOME%\ext目录中 修改php.ini文件, ...
- Web开发者需具备的8个好习惯
优秀的Web开发人员工作效率更高,因为他们拥有丰富的经验和良好的习惯.作者Gregor Dorfbauer分享了用于Web开发中的8个好习惯,这些良好的工作习惯不仅能提高效率,还能让您创建更加优秀的应 ...
- safari的调试工具
safari的调试工具默认是没有打开的设置——>偏好设置——>高级———>在菜单栏中显示开发菜单
- Java的static详解
static ['stætɪk] n. 静电:静电干扰 adj. 静态的:静电的:静力的 在计算机上我们译为:静态的.在Java种根据它修饰对象不同,我们可以划分为 1. static对象 2. st ...
- Ordering Tasks(拓扑排序+dfs)
Ordering Tasks John has n tasks to do. Unfortunately, the tasks are not independent and the executio ...
- UVA - 1103Ancient Messages(dfs)
UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...
- 飘逸的python - 用urlparse从url中抽离出想要的信息
最近有个需求,要检测配置中的那些url的域名是否都正常,即是否都能ping通. 不过配置中url格式是这样的 http://www.something.com:1234/ . 要ping的是www.s ...
- javascript条件运算符
variablename=(condition)?value1:value2 javascript条件运算符
- Jps介绍以及解决jps无法查看某个已经启动的java进程问题【盗用】
1.jps的作用 jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command. 2 ...