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文件实现的,提 ...
随机推荐
- As Easy As A+B
Problem Description These days, I am thinking about a question, how can I get a problem as easy as A ...
- 使用VisualStudio发布ASP.NET网站
1.右击网站点击“发布网站” 2.选择或导入发布配置文件.→新建配置文件. 3.输入名称test.→点击确定. 4.发布方法选择文件系统. 5.选择目标位置.→点击下一步 6.文件发布选项选择三个选项 ...
- C++学习之嵌套类和局部类
C++学习之嵌套类和局部类 局部类 在一个函数体内定义的类称为局部类. 局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关.在定义局部类时需要注意:局部类 ...
- Labview中引用,属性节点,局部变量之间的区别
Labview中引用,属性节点,局部变量之间的区别 在Labview中我们经常会碰到这样几个概念,那就是控件的引用,属性节点以及局部变量,他们之间到底有哪些区别呢? 首先谈 ...
- 获取select赋值
<select class="sel-ul-add" id="xuanzhe"> <option>A</option> &l ...
- css兼容问题与实践归纳总结
css兼容问题与实践归纳总结 一.IE6/7 原生块元素与display:inline-block; <div style="display:inline-block;"&g ...
- 精通 VC++ 实效编程280例 - 01 窗口
窗口是屏幕上的一个矩形区域.窗口分为3种:重叠窗口.弹出窗口和子窗口.每个窗口都有由系统绘制的“非客户区”和应用程序绘制的“客户区”.在 MFC 中,CWnd 类为各种窗口提供了基类. 1 通过 HW ...
- hdoj 2546 饭卡(0-1背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路分析:该问题为0-1背包问题的变形题:问题求余额最少,设开始的余额为V,则求得用V-5可以买 ...
- Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
Android设备实现录制音频的简单demo 转载请注明; http://blog.csdn.net/u013670933/article/details/26089487 代码例如以下: publi ...
- Cocos2d-X 动作展示《一》
因为Cocos2d-X中的动作较多,我将全部的动作制作成了一个滚动视图.每一个滚动视图上都有动作名,单击滚动视图就能够展示对应的动作 程序效果图: 使用滚动视图实现动作切换 动作展示 程序代码: 首先 ...