android textview设置html标签 怎么转义html标签

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Android中TextView支持的HTML标记
下载积分:1000
内容提示:Android中TextView支持的HTML标记
文档格式:DOC|
浏览次数:78|
上传日期: 14:44:06|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
Android中TextView支持的HTML标记
官方公共微信Android TextView使用HTML处理字体样式、显示图片等
我的图书馆
Android TextView使用HTML处理字体样式、显示图片等
& & & & &学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=\"/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_zhang.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 =
url = new URL(source);
drawable = Drawable.createFromStream(url.openStream(), "");
//获取网路图片
} catch (Exception e) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
这里主要是实现了Html.ImageGetter接口,通过图片的URL地址获取相应的Drawable实例。
不要忘了在Mainifest文件中加入网络访问的权限:
&uses-permission android:name="android.permission.INTERNET" /&
&友情提示:通过网络获取图片是一个耗时的操作,最好不要放在主线程中,否则容易引起阻塞。
上面介绍的是显示网络上的图片,但如何显示本地的图片呢:
ImageGetter imgGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
Drawable drawable =
drawable = Drawable.createFromPath(source); //显示本地图片
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
};只需将source改为本地图片的路径便可,在这里我使用的是:
source=getFilesDir()+"/ic_launcher.png";
TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢中国领先的IT技术网站
51CTO旗下网站
Android中Textview显示带html文本
在Android中使用Textview处理带html文本,如图片标签、网络图片等,文章中分别对本地图片、项目资源图片和网络图片的显示提供方法。
作者:佚名来源:| 13:54
下面着重说一下Textview显示&img&标签,也许看到这里,大家都会想到就是构建ImageGetter,重载一下其 public Drawable getDrawable(String source)方法,获取该路径的图片。
final&Html.ImageGetter&imageGetter&=&new&Html.ImageGetter()&{&&&&&&&&&public&Drawable&getDrawable(String&source)&{&&&&&&&&&&&&&return&&&&&&&&&&};&&&&&&&};&
下面来说下public Drawable getDrawable(String source)这个方法,source就是图片路径!
final&String&sText&=&&测试图片信息:&br&&img&src=\&/news/_1.jpg\&&/&&img&src=\&/news/_1.jpg\&&/&&;&tView.setText(Html.fromHtml(sText,&imageGetter,&null));&
则source就是img的src的值,既是:/news/_1.jpg这个图片路径。
当然这个&img src=路径/& 这个路径既可以是网络图片,也可以本地图片,项目资源图片。
例如:本地图片&img src=\&&/sdcard/images/test.jpg&\&/&& &项目资源图片 &img src=\&&+R.drawable.market_none_image+&\&/&
但是不同的路径,ImageGetter的重载处理方法都不一样,下面来一一介绍各种的处理方式.
第一种:本地图片
final&String&sText2&=&&测试图片信息:&img&src=\&/mnt/sdcard/temp/1.jpg\&&/&&;&tView.setText(Html.fromHtml(sText2,&imageGetter,&null));&&&final&Html.ImageGetter&imageGetter&=&new&Html.ImageGetter()&{&&&&&&&public&Drawable&getDrawable(String&source)&{&&&&&&&&&Drawable&drawable=null;&&&&&drawable=Drawable.createFromPath(source);&&&&&drawable.setBounds(0,&0,&drawable.getIntrinsicWidth(),&drawable.getIntrinsicHeight());&&&&&return&};&}&
第二种:项目资源图片
final&String&sText1&=&&测试图片信息:&img&src=\&&+R.drawable.market_none_image+&\&&/&&;tView.setText(Html.fromHtml(sText1,&imageGetter,&null));&&&final&Html.ImageGetter&imageGetter&=&new&Html.ImageGetter()&{&&&&&&&public&Drawable&getDrawable(String&source)&{&&&&&&&&&Drawable&drawable=null;&&&&&int&rId=Integer.parseInt(source);&&&&&drawable=getResources().getDrawable(rId);&&&&&drawable.setBounds(0,&0,&drawable.getIntrinsicWidth(),&drawable.getIntrinsicHeight());&&&&&return&};&}&
第三种:网络图片
final&String&sText&=&&测试图片信息:&br&&img&src=\&/news/_1.jpg\&&/&&;&tView.setText(Html.fromHtml(sText,&imageGetter,&null));&&&final&Html.ImageGetter&imageGetter&=&new&Html.ImageGetter()&{&&&&&&&public&Drawable&getDrawable(String&source)&{&&&&&&&&&Drawable&drawable=null;&&&&&URL&&&&&&try&{&&&&&&&&&url&=&new&URL(source);&&&&&&&&&drawable&=&Drawable.createFromStream(url.openStream(),&&&);&&&&&}&catch&(Exception&e)&{&&&&&&&&&e.printStackTrace();&&&&&&&&&return&null;&&&&&}&&&&&drawable.setBounds(0,&0,&drawable.getIntrinsicWidth(),&drawable.getIntrinsicHeight());&&&&&&&&&&&&&&&&&return& };&}&
通过这三个方式,可以看出,不同的图片路径,得到图片的处理方式不同,大家也能一目了然的看出来ImageGetter是干什么的了,就是得到img中src所需的图片!
提醒一点:获取图片以后,一定要设置图片的边界,界线,即:drawable.setBounds(0, 0,
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());,不然获取图片后,Textview不能显示图片。
通过以上三种方式,是能可以显示出来图片,但是我发现了一个问题,就是第三种,显示网络图片,我用android2.3的系统,可以显示图片出来,并且如 果图片比较大,应用会卡的现象,肯定是因为使用主线程去获取网络图片造成的,但如果我用android4.0以上的系统运行,则不能显示图片,只显示小方 框。
究其原因,是在4.0的系统上执行的时候报错了,异常是:android.os.NetworkOnMainThreadException
经过查文档,原来是4.0系统不允许主线程(UI线程)访问网络,因此导致了其异常。说白了就是在主线程上访问网络,会造成主线程挂起,系统不允许使用 了。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
原创聚焦热点原创热点
24H热文一周话题本月最赞
讲师:740127人学习过
讲师:108838人学习过
讲师:12093人学习过
精选博文论坛热帖下载排行
本书由Symantec首席反病毒研究员执笔,是讲述现代病毒威胁、防御技术和分析工具的权威指南。与多数讲述计算机病毒的书籍不同,本书完全是...
订阅51CTO邮刊2016年3月 移动开发大版内专家分月排行榜第二
2016年3月 移动开发大版内专家分月排行榜第二
2016年3月 移动开发大版内专家分月排行榜第二
2016年4月 移动开发大版内专家分月排行榜第二
2017年8月 移动开发大版内专家分月排行榜第三2016年7月 移动开发大版内专家分月排行榜第三2015年12月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 php转义html标签 的文章

 

随机推荐