当前位置:首页 > 青鸟知识 > android

Android TextView利用HTML处置字体款式、显示图片等

来源:湖南it培训 发布日期:2016-05-21

学Android的时辰俄然想到一个标题:怎样用TextView控件显现带有格局的文字,能否应用Html构造?查了下Android 帮助文档,其供应了android.text.Html类和Html.ImageGetter、Html.TagHandler接口。

真实本不筹算写这篇博文的,但看到搜集上关于此的文章,根基是:你抄我,我抄你,巨匠抄来抄往,有效的也就那末一两篇文章,并且说得不明不白,搜集就是如斯,盗版同样成为了一种文化,这就是所谓的拿来主义吧。固然不否认大牛的辛劳劳作,写出的高质量文章;其次是学乃至用,小我习气--总结一下。

先看截图:

我们泛泛应用TextView的setText()方式传送String参数的时辰,实践上是挪用的public final void setText (CharSequence text)方式:

[java] view plaincopy

/**

   * Sets the string value of the TextView. TextView em does not /em

accept

   * HTML-like formatting, which you can do with text strings in XML

resource files.

   * To style your strings, attach android.text.style.* objects to a

   * {@link android.text.SpannableString SpannableString}, or see the

   * a href= {@docRoot}guide/topics/resources/available-resources.html#stringresources

   * Available Resource Types /a documentation for an example of setting

   * formatted text in the XML resource file.

   *

   * @attr ref android.R.styleable#TextView_text

   */  

  @android.view.RemotableViewMethod  

  public final void setText(CharSequence text) {  

      setText(text, mBufferType);  

  }  

而String类是CharSequence的子类,在CharSequence子类中有一个接口Spanned,即近似html的带标识表记标帜的文本,我们能够用它来在TextView中显现html。但在下面Android源码正文中有说起TextView does not accept HTML-like formatting。

android.text.Html类共供应了三个方式,能够到Android帮助文档检查。

[java] view plaincopy

public static Spanned fromHtml (String source)  

 

public static Spanned fromHtml (String source, Html.

ImageGetter imageGetter, Html.TagHandler tagHandler)  

 

public static String toHtml (Spanned text)  

经由过程应用第一个方式,能够将Html显现在TextView中:

[java] view plaincopy

public void onCreate(Bundle savedInstanceState) {  

       super.onCreate(savedInstanceState);  

       setContentView(R.layout.main);  

 

       TextView tv=(TextView)findViewById(R.id.textView1);  

       String html= html head title TextView应用HTML

/title /head body p strong 夸张 /strong /p p em 斜体 /em /p  

               + p a href= //www.dreamdu.com/xhtml/

超链接HTML进门 /a 进修HTML! /p p font color= #aabb00 颜色1  

               + /p p font color= #00bbaa 颜色2 /p h1 标题1

/h1 h3 标题2 /h3 h6 标题3 /h6 p 大于 小于 /p p +  

                上面是搜集图片 /p img src= //avatar.csdn.net/0/3/8/2_zhang957411207.jpg /

/body /html ;  

         

       tv.setMovementMethod(ScrollingMovementMethod.getInstance());//转动  

       tv.setText(Html.fromHtml(html));      

   }  

结果:

             

能够看出,字体结果是显现出来了,可是图片却没有显现。要完成图片的显现需求应用Html.fromHtml的别的一个重构方式:public static Spanned fromHtml (String source, Html.ImageGetterimageGetter, Html.TagHandler tagHandler)此中Html.ImageGetter是一个接口,我们要完成此接口,在它的getDrawable(String source)方式中前往图片的Drawable对象才能够。
点窜后的代码:

[java] view plaincopy

ImageGetter imgGetter = new Html.ImageGetter() {  

       public Drawable getDrawable(String source) {  

             Drawable drawable = null;  

             URL url;    

             try {    

                 url = new URL(source);    

                 drawable = Drawable.createFromStream

(url.openStream(), );  //取得网路图片  

             } catch (Exception e) {    

                 return null;    

             }    

             drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),

drawable  

                           .getIntrinsicHeight());  

             return drawable;  

       }  

};  

这里首要是完成了Html.ImageGetter接口,经由过程图片的URL地址取得响应的Drawable实例。
不要忘了在Mainifest文件中插手搜集拜候的权限:

[java] view plaincopy

uses-permission android:name= android.permission.INTERNET /  

友谊提示:经由过程搜集取得图片是一个耗时的支配,最好不要放在主线程中,不然随便引发梗阻。
下面先容的是显现搜集上的图片,但若何显现当地的图片呢:

[java] view plaincopy

  ImageGetter imgGetter = new Html.ImageGetter() {  

       public Drawable getDrawable(String source) {  

             Drawable drawable = null;  

               

             drawable = Drawable.createFromPath(source); //显现当地图片  

             drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),

drawable  

        .getIntrinsicHeight());  

             return drawable;  

       }  

};  

只需将source改成当地图片的途径即可,在这里我应用的是:

[java] view plaincopy

String source;  


拒绝套路 试听有礼

数据已加密保证您的信息安全