学Android的时候突然想到一个问题:怎么用TextView控件显示带有格式的文字,可否使用Html布局?查了下Android 帮助文档,其提供了android.text.Html类和Html.ImageGetter、Html.TagHandler接口。
其实本不打算写这篇博文的,但看到网络上关于此的文章,基本是:你抄我,我抄你,大家抄来抄去,有用的也就那么一两篇文章,而且说得不明不白,网络就是如 此,盗版也成为了一种文化,这就是所谓的拿来主义吧。当然不否认大牛的辛勤劳作,写出的高质量文章;其次是学以致用,个人习惯--总结一下。
先看截图:
我们平常使用TextView的setText()方法传递String参数的时候,其实是调用的public final void setText (CharSequence text)方法:
- /**
- * 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帮助文档查看。
- 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中:
- 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=\"http://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=\"http://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;
- source=getFilesDir()+"/ic_launcher.png";
From: http://blog.csdn.net/johnsonblog/article/details/7741972
附:
超链接的另一种识别方式:
String html="www.baidu.com";//这里即使不加协议号HTTP;也能自动被系统识别出来。
textView.setText(html);
textView.setAutoLinkMask(Linkify.ALL);
textView.setMovementMethod(LinkMovementMethod.getInstance());
这两种方法,都得设置一下setMovementMethod,才会跳转。
另外setAutoLinkMask不仅 识别超链接,包括电话号码之类的。
详细出处参考:http://www.jb51.net/article/38160.htm
相关推荐
Android TextView可以支持简单的Html标签,但大部分Html标签是不支持的或者处理得不太好的,其中Img标签就是如此。如果在html中使用img标签的话就会遇到以下问题: 1、图片不能居中显示 2、图片的大小被缩小...
html文件常常是含有图片,如果需要在Textview中实现文字和图片的混排,需要使用ImageGetter。ImageGetter是Html类中一个接口,作用是给img标签获取图片内容,主要提供了一个getDrawable的方法。但很多情况下,需要...
支持TextView默认支持的所有标签,支持自定义,取代安卓默认的Html.TagHandler 特性 支持TextView默认支持的标签 支持自定义标签,接口类似Html.TagHandler 1 自定义标签: /** * 解析哈哈哈 */ public class ...
本文实例讲述了Android TextView显示Html类解析的网页和图片及自定义标签。分享给大家供大家参考,具体如下: Android系统显示HTML网页的最佳控件为WebView,有时候为了满足特定需求,需要在TextView中显示HTML网页...
本文实例讲述了Android实现TextView显示HTML加图片的方法。分享给大家供大家参考,具体如下: TextView显示网络图片,我用android2.3的系统,可以显示图片出来,并且如果图片比较大,应用会卡的现象,肯定是因为使用...
博客地址 http://blog.csdn.net/bhadx520?viewmode=list
通过TextView实现了对于HTML数据的实现,并且实现了标签中的图片居中跟缩放到最适宽度以及图片的点击查看。
查看文章:[Android教程]TextView显示Html类解析的网页和图片及自定义标签 3、在TextView四周显示图片 mTVText.setText("setCompoundDrawables"); Drawable d = getResources().getDrawable(R.drawable.ic_launcher)...
FlexibleRichTextView一个可以显示LaTeX、图片、代码的TextView,你可以自定义标签。
android仿微博@人、http可点击,引用话题点击等;
Medium Textview Medium android application displays content with text, image, video etc in post detail. It can be a pain to do it with content came from CMS. So i decided to design that View to ...
除了少量HTML标签外,该库还允许从本地drawables文件夹或Internet加载图像。 该库保持很小,没有外部依赖性。 如何汇入 将此添加到您的build.gradle中: repositories { jcenter() } dependencies { compile '...
Android中的TextView,本身就支持部分的Html格式标签。这其中包括常用的字体大小颜色设置,文本链接等。使用起来也比较方便,只需要使用Html类转换一下即可。比如: textView.setText(Html.fromHtml(str)); 然而,有...
通过重写TextView的方式实现自动解析Html文本的自定义组件HtmlView,该组件主要实现的功能是解析标签显示图片并添加图片的点击事件,另外在代码中也示范了一种解析自定义标签的方法(此方法参考stackoverflow上某个...
TextView 富文本 相关实现,包含的本地图片的加载,网络图片的加载,自定义标签的实现等
基本TextView控件的应用,包括TextView各种属性的设置,特殊的效果的TextView,如带边框的TextView各种实现方法,走马灯,垂直滚动,自动垂直滚动,歌词显示效果,超链接,Html标签在TextView中的应用等。
现在网络的繁盛时代,光文字是不能... 首先,说下TextView到底支持那些标签呢,通过对源码的查看,发现Textview可以解析一部分html标签,如: 代码如下: <a> <b> <big> <blockquote> <cite> <dfn> ”…”> <e
android.text.Html类中有一个可爱的方法fromHtml ,可以将 HTML 转换为Spannable以与TextView一起使用。 然而,文档并没有规定支持哪些 HTML 标签,这使得这种方法有点碰运气。 这个小型库提供了一个 DSL,用于为...
在5.2.1节和5.2.2节介绍了标签以及TextView自动识别的特殊文本(网址、电话号、Email等),这些都可以通过单击来触发不同的动作。虽然这些单击动作已经可以满足大多数需要了,但如果读者想在单击链接时执行任意...