热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidTextView之Html.fromHtml学习

我们的APP经常会有大量的文字信息要展示,一般就是用TextView来展示各种文字信息。TextView的基本用法比较简单,一般设置是通过textView.setText方法来给TextView

我们的APP经常会有大量的文字信息要展示,一般就是用TextView来展示各种文字信息。TextView的基本用法比较简单,一般设置是通过textView.setText方法来给TextView来设置文字,咱们最常用的就是

public final void setText (CharSequence text)

这个方法,该方法接收一个CharSequence类型的参数,CharSequence是一个接口,所以只要实现了该接口的类,我们都可以把该类的对象作为参数传进去。可以看看我们常用的String类,String类,String实现了该接口,所以我们平时可以直接把String对象作为参数传到setText()方法里。
一般我们的APP,数据都是从服务器上获取到的Json格式的,通常我们会根据要显示的内容给TextView设置一个Style,这样TextView就可以根据指定的Style来显示文本内容了。但是有些情况下一段文字需要显示不同的颜色或者字体,如果用多个TextView来显示的话,就会非常繁琐和不灵活,所以Android给我们提供了一个Spanned接口(注:该接口继承CharSequence接口),我们可以向setText传入该接口类型的对象,其中SpannedString类就实现了该接口。所以我们想定制TextView的显示样式,可以通过定制SpannedString的对象来实现。Android系统提供了一个Html类,该类位于android.text包下,“This class processes HTML strings into displayable styled text. Not all HTML tags are supported.”这是该类的注释,大体意思就是可以把Html字符串转成可显示的样式,但是不是支持所有标签。其中有一个方法Html.fromHtml(),该方法接收一个String类型的参数,还有一个重载接收三个参数。并且该方法返回一个Spanned对象,所以我们可以通过该方法来生成一个可用于TextView的setText()方法的参数,这样就可以实现对TextView显示格式的定制。

public static Spanned fromHtml(String source)

其中source参数为一个Html字符串,如:

这是一个p标签

。我们可以调用该方法,传入一个Html字符串,然后就可以生成一个Spanned对象,把该对象传入TextView的setText后可以看出显示效果跟网页上显示的差不多

这里写图片描述

这样就很大程度上提高了TextView的可定制性,可以让一个TextView显示不同格式的文字。但是如果标签里包含img标签,那就没法正常显示图片,但是TextView会显示一个很小的占位图,表示这里是一张图片。
此时就需要用到另外一个重载了

public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)

该方法除了接收一个String的参数外,还接收一个ImageGetter和TagHandler类型的参数,其实通过源码可以看出一个参数的fromHtml内部其实是调用了三个参数的fromHtml方法,只不过是这两个参数都传了null

public static Spanned fromHtml(String source) {
        return fromHtml(source, null, null);
    }

其中ImageGetter是一个接口,“Retrieves images for HTML tags.”这是该接口的注释,大体意思就是检索img标签,里边定义了一个public Drawable getDrawable(String source); 方法,该方法在解析HTML字符串的时候遇到img标签的时候会回调,参数就是图片的URL,返回一个Drawable对象。如果我们想在TextView里能正常显示img标签的图片,那我们就需要实现ImageGetter接口,在里边实现加载图片的功能。以下是一个简单的示例:

static class ImageGetterImpl implements Html.ImageGetter {

        @Override
        public Drawable getDrawable(String source) {
            URL url;
            Drawable drawable = null;
            try {
                url = new URL(source);
                drawable = Drawable.createFromStream(
                        url.openStream(), null);
                drawable.setBounds(0, 0,
                        drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return drawable;
        }
    }

这里要注意一下,这段示例代码是运行在主线程里的,所以在实际使用的时候,需要放到工作线程里去做,还有就是Drawable记得要设置Bounds,不然就不能正常显示。如果Html标签里有多个img标签的话,该方法会多次回调

这是效果图

显示效果还不错吧!

其中第三个参数TagHandler 将在之后的文档中进一步分析。


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
小啊丌-619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有