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文件实现的,提 ...
随机推荐
- apache hide index.php
<Directory "D:/usr/local/www"> AllowOverride all Options +FollowSymLinks +SymL ...
- Hive入门之UDFS函数
一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数. DESCRIBE FUNCTION<function_name>; (2)A IS NUL ...
- 怎样使用Markdown
转自:http://wowubuntu.com/markdown/basic.html 段落.标题.区块代码 一个段落是由一个以上的连接的行句组成,而一个以上的空行则会划分出不同的段落(空行的定义是显 ...
- 5G关键技术研究方向
对于还没体验4G移动通信魅力的国内的移动通信用户而言,5G也许还是镜中花,雾中月:但对于科研界而言,5G研究已经启程,三星电子5月份宣布,率先开发出了首个基于5G核心技术的移动传输网络,实现每秒1Gb ...
- android中ScrollView和GridView/ListView共存时,ScrollView不在顶部的解决方法
listView.setFocusable(false); gridView.setFocusable(false); 这个必须在代码中写,xml文件中设置不起作用 原文:http://stackov ...
- 对discuz的代码分析学习(一)目录结构
主目录 DISCUZ用的是自己的框架,和其他框架应用一样属于单入口应用.主目录下的.php文件,大部分是应用的入口文件. home.php:家园入口,即论坛中类似博客的那个东西.index.php:首 ...
- 闪存主控IC的作用
闪存主要是由闪存芯片.主控芯片.晶振.PCB板等部件组成的.其中主控芯片相当于闪存的“灵魂”,它控制着闪存的工作.主控芯片也是处理单元,在里面写入的程序对整个电路做控制.主控IC是把flash跟hos ...
- 当cpu飙升时,找出php中可能有问题的代码行
参考大牛: http://www.searchtb.com/2014/04/%E5%BD%93cpu%E9%A3%99%E5%8D%87%E6%97%B6%EF%BC%8C%E6%89%BE%E5%8 ...
- Mac经常使用快捷键
Mac使用快捷键会节省非常多时间.使用最多的键就是shift键 option键 command键的组合了.当然一下略微用得多一点点,还有非常多快捷键没一一列举了 进入指定文件夹的一些快捷键 进入 A ...
- hdu 1507 Largest Rectangle in a Histogram 动态规划计算最大面积
记录动态规划dpl,dpr,分辨记录i左面的比i大的,右面比i大的,然后(dpr[i]-dpl[i]+1)*h[i]得出长度 动态转移方程while(temp>1 && h[te ...