学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 plaincopypublic 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 plaincopypublic 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对象才能够。
点窜后的代码:
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文件中插手搜集拜候的权限:
uses-permission android:name= android.permission.INTERNET /
友谊提示:经由过程搜集取得图片是一个耗时的支配,最好不要放在主线程中,不然随便引发梗阻。
下面先容的是显现搜集上的图片,但若何显现当地的图片呢:
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改成当地图片的途径即可,在这里我应用的是:
String source;