`
从此醉
  • 浏览: 1040486 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

Android TextView使用HTML处理字体样式、显示图片等

 
阅读更多

学Android的时候突然想到一个问题:怎么用TextView控件显示带有格式的文字,可否使用Html布局?查了下Android 帮助文档,其提供了android.text.Html类和Html.ImageGetter、Html.TagHandler接口

其实本不打算写这篇博文的,但看到网络上关于此的文章,基本是:你抄我,我抄你,大家抄来抄去,有用的也就那么一两篇文章,而且说得不明不白,网络就是如此,盗版也成为了一种文化,这就是所谓的拿来主义吧。当然不否认大牛的辛勤劳作,写出的高质量文章;其次是学以致用,个人习惯--总结一下。

先看截图:


我们平常使用TextView的setText()方法传递String参数的时候,其实是调用的public final void setText (CharSequence text)方法:

  1. /**
  2. *SetsthestringvalueoftheTextView.TextView<em>doesnot</em>accept
  3. *HTML-likeformatting,whichyoucandowithtextstringsinXMLresourcefiles.
  4. *Tostyleyourstrings,attachandroid.text.style.*objectstoa
  5. *{@linkandroid.text.SpannableStringSpannableString},orseethe
  6. *<ahref="{@docRoot}guide/topics/resources/available-resources.html#stringresources">
  7. *AvailableResourceTypes</a>documentationforanexampleofsetting
  8. *formattedtextintheXMLresourcefile.
  9. *
  10. *@attrrefandroid.R.styleable#TextView_text
  11. */
  12. @android.view.RemotableViewMethod
  13. publicfinalvoidsetText(CharSequencetext){
  14. setText(text,mBufferType);
  15. }
而String类是CharSequence的子类,在CharSequence子类中有一个接口Spanned,即类似html的带标记的文本,我们可以用它来在TextView中显示html。在上面Android源码注释中有提及TextView does not accept HTML-like formatting。

android.text.Html类共提供了三个方法,可以到Android帮助文档查看。

  1. publicstaticSpannedfromHtml(Stringsource)
  2. publicstaticSpannedfromHtml(Stringsource,Html.ImageGetterimageGetter,Html.TagHandlertagHandler)
  3. publicstaticStringtoHtml(Spannedtext)


通过使用第一个方法,可以将Html显示在TextView中:

  1. publicvoidonCreate(BundlesavedInstanceState){
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. TextViewtv=(TextView)findViewById(R.id.textView1);
  5. Stringhtml="<html><head><title>TextView使用HTML</title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"
  6. +"<p><ahref=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p><p><fontcolor=\"#aabb00\">颜色1"
  7. +"</p><p><fontcolor=\"#00bbaa\">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6><p>大于>小于<</p><p>"+
  8. "下面是网络图片</p><imgsrc=\"http://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/></body></html>";
  9. tv.setMovementMethod(ScrollingMovementMethod.getInstance());//滚动
  10. tv.setText(Html.fromHtml(html));
  11. }
效果:


可以看出,字体效果是显示出来了,但是图片却没有显示。要实现图片的显示需要使用Html.fromHtml的另外一个重构方法:public static Spanned fromHtml (String source, Html.ImageGetterimageGetter, Html.TagHandler tagHandler)其中Html.ImageGetter是一个接口,我们要实现此接口,在它的getDrawable(String source)方法中返回图片的Drawable对象才可以。
修改后的代码:

  1. ImageGetterimgGetter=newHtml.ImageGetter(){
  2. publicDrawablegetDrawable(Stringsource){
  3. Drawabledrawable=null;
  4. URLurl;
  5. try{
  6. url=newURL(source);
  7. drawable=Drawable.createFromStream(url.openStream(),"");//获取网路图片
  8. }catch(Exceptione){
  9. returnnull;
  10. }
  11. drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable
  12. .getIntrinsicHeight());
  13. returndrawable;
  14. }
  15. };

这里主要是实现了Html.ImageGetter接口,通过图片的URL地址获取相应的Drawable实例。
不要忘了在Mainifest文件中加入网络访问的权限:

  1. <uses-permissionandroid:name="android.permission.INTERNET"/>

友情提示:通过网络获取图片是一个耗时的操作,最好不要放在主线程中,否则容易引起阻塞。
上面介绍的是显示网络上的图片,但如何显示本地的图片呢:


  1. ImageGetterimgGetter=newHtml.ImageGetter(){
  2. publicDrawablegetDrawable(Stringsource){
  3. Drawabledrawable=null;
  4. drawable=Drawable.createFromPath(source);//显示本地图片
  5. drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable
  6. .getIntrinsicHeight());
  7. returndrawable;
  8. }
  9. };
只需将source改为本地图片的路径便可,在这里我使用的是:

  1. Stringsource;
  2. source=getFilesDir()+"/ic_launcher.png";



THE END

分享到:
评论

相关推荐

    Android的TextView使用Html来处理图片显示、字体样式、超链接等

    其中 Html.fromHtml("&lt;img src='"+clickedImageId+"'/&gt;"就是HTML的图片标记,在Android中支持了部分HTML标记的使用(这方面我还在继续研究),HTML标记必须被Html.fromHtml修饰。imageGetter即为之前创建的...

    TextView_HTML

    Android TextView使用HTML处理字体样式、显示图片、超链接项目源码

    Android TextView显示html样式的文字

    TextView显示一段文字,格式为:白雪公主(姓名,字数不确定)向您发来了2(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色。 就想到了用 Html.fromHtml(String...

    Android中Textview超链接实现方式

    TextView中的超链接可以通过几种方式实现:1.Html.fromHtml,2.Spannable,3.Linkify.addLinks。下面分别进行测试,包括修改字体样式,下划线样式,点击事件等,需要的朋友可以参考下

    Android开发应用实战详解源代码

    3.6 样式修饰处理 3.7 按钮事件响应 3.8 页面间的转换 3.9 activity调用 3.10 多个activity间的数据传递 3.11 将数据返回到前一个activity 3.12 对话框交互处理 3.13 文字颜色置换 3.14 文字字体设置 3.15 拖动相片...

    《Google Android SDK开发范例大全(第3版)》.pdf

     全书共分11章,主要以范例集的方式来讲述android的知识点,详细介绍了开发android的人机交互界面、android常用的开发控件、android手机收发短信等通信服务、开发android手机的自动服务功能和娱乐多媒体功能以及...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android SDK开发范例大全(第3版) 1/5

    全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合...

    Google Android SDK开发范例大全(第3版) 4/5

    全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合...

    Google Android SDK开发范例大全(第3版) 3/5

    全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合...

    Google Android SDK开发范例大全(第3版) 5/5

    全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android SDK开发范例大全(第3版)part2

     全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及...

    Google Android SDK开发范例大全的目录

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    google android sdk开发范例大全 第二版 PDF 光盘代码

    google android sdk开发范例大全 第二版 PDF 和 随书光盘代码 ISBN:9787115229649 目录 第1章 了解、深入、动手做   1.1 红透半边天的Android   1.2 本书目的及范例涵盖范围   1.3 如何阅读本书 ...

Global site tag (gtag.js) - Google Analytics