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

转载 2013年12月04日 16:43:28

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

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

先看截图:

               

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

[java] view plaincopy
  1. /** 
  2.     * Sets the string value of the TextView. TextView <em>does not</em> accept 
  3.     * HTML-like formatting, which you can do with text strings in XML resource files. 
  4.     * To style your strings, attach android.text.style.* objects to a 
  5.     * {@link android.text.SpannableString SpannableString}, or see the 
  6.     * <a href="{@docRoot}guide/topics/resources/available-resources.html#stringresources"> 
  7.     * Available Resource Types</a> documentation for an example of setting  
  8.     * formatted text in the XML resource file. 
  9.     * 
  10.     * @attr ref android.R.styleable#TextView_text 
  11.     */  
  12.    @android.view.RemotableViewMethod  
  13.    public final void setText(CharSequence text) {  
  14.        setText(text, mBufferType);  
  15.    }  
        而String类是CharSequence的子类,在CharSequence子类中有一个接口Spanned,即类似html的带标记的文本,我们可以用它来在TextView中显示html。在上面Android源码注释中有提及TextView does not accept HTML-like formatting。

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

[java] view plaincopy
  1. public static Spanned fromHtml (String source)  
  2.   
  3. public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)  
  4.   
  5. public static String toHtml (Spanned text)  


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

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

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

[java] view plaincopy
  1. ImageGetter imgGetter = new Html.ImageGetter() {  
  2.         public Drawable getDrawable(String source) {  
  3.               Drawable drawable = null;  
  4.               URL url;    
  5.               try {     
  6.                   url = new URL(source);    
  7.                   drawable = Drawable.createFromStream(url.openStream(), "");  //获取网路图片  
  8.               } catch (Exception e) {    
  9.                   return null;    
  10.               }    
  11.               drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable  
  12.                             .getIntrinsicHeight());  
  13.               return drawable;   
  14.         }  
  15. };  

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

[java] view plaincopy
  1. <uses-permission android:name="android.permission.INTERNET" />  

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


[java] view plaincopy
  1.    ImageGetter imgGetter = new Html.ImageGetter() {  
  2.         public Drawable getDrawable(String source) {  
  3.               Drawable drawable = null;  
  4.                  
  5.               drawable = Drawable.createFromPath(source); //显示本地图片  
  6.               drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable  
  7.                             .getIntrinsicHeight());  
  8.               return drawable;   
  9.         }  
  10. };  
只需将source改为本地图片的路径便可,在这里我使用的是:

[java] view plaincopy
  1. String source;  
  2. source=getFilesDir()+"/ic_launcher.png";  

转载:http://blog.csdn.net/johnsonblog/article/details/7741972

Android在一个TextView里显示不同样式的字体

在同一个TextView里显示不同样式的字体public void setSpan(Object what, int start, int end, int flags);样式1:背景色、粗体、字体大...
  • q4878802
  • q4878802
  • 2015年11月10日 12:10
  • 1981

TextView显示带图片html的几种处理方式

Textview可以显示基本的HTML标签,如果不知道那些标签,可以查看Android中Textview显示带html文本一-------【HTML标签】! 下面着重说一下Textview显示“im...
  • adamxl
  • adamxl
  • 2013年01月22日 17:35
  • 10264

Textview显示Html,图文混排,支持图片点击放大

对于呈现Html文本来说,Android提供的Webview控件可以得到很好的效果,但使用Webview控件的弊端是效率相对比较低,对于呈现简单的html文本的话,杀鸡不必使用牛刀。另外如果是在Lis...
  • u010403463
  • u010403463
  • 2015年06月26日 19:29
  • 2464

Android TextView丰富多彩的字体样式代码

import java.io.IOException; import org.xmlpull.v1.XmlPullParserException; import android.app.A...
  • knxw0001
  • knxw0001
  • 2013年04月23日 11:18
  • 8011

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

一、[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html ...
  • hanjieson
  • hanjieson
  • 2013年08月24日 23:16
  • 1963

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

一、[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html ...
  • MYBOYER
  • MYBOYER
  • 2013年12月23日 14:27
  • 861

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

本文转自: http://blog.csdn.net/zhang957411207/article/details/7741972 先看截图: 我们平常使用TextView的...
  • zhuiqiuk
  • zhuiqiuk
  • 2016年12月14日 02:09
  • 790

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

上图 用到html就可以在
  • wanghao200906
  • wanghao200906
  • 2014年11月12日 17:23
  • 1110

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

学Android的时候突然想到一个问题:怎么用TextView控件显示带有格式的文字,可否使用Html布局?查了下Android 帮助文档,其提供了android.text.Html类和Html.Im...
  • xu_song
  • xu_song
  • 2013年03月09日 18:29
  • 792

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

http://blog.csdn.net/johnsonblog/article/details/7741972  学Android的时候突然想到一个问题:怎么用Te...
  • yujunlong3919
  • yujunlong3919
  • 2014年10月14日 11:46
  • 531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android TextView使用HTML处理字体样式、显示图片等
举报原因:
原因补充:

(最多只允许输入30个字)