Android Spanned实现TextView富文本效果(2)--表情

原文:http://www.cnblogs.com/lichenwei/p/4612079.html

今天学习富文本后续表情的处理

这种实现方式是通过Android官方给我们提供的Html类下面的fromHtml方法,这个方法可以对字符串进行HTML格式化,让TextView等一些控件”认识”HTML。

fromHtml有2个重载方法,下面我简单点来说:

1、当你需要转换的HTML代码是纯文字,比如超链接,换行符,邮件收发等,那么直接使用第一个方法即可,将你的文本信息直接传入方法。

2、当你需要转换的HTML代码是带图片的,比如<IMG/>,那么你就需要使用到重载的第二个方法了,这个方法里面有个ImageGetter对象,实现这个类会发现它回调了一个抽象getDrawable方法,在这个方法里,我们可以进行远程图片的下载获取,本地资源图片的获取等。第三个参数TagHandler是用来自定义一些不属于HTML代码的一些标签,一般我们不会去用到,直接置为null即可。

用法:

  1. 首先定义一个类似Html标签的String

    1. String html = "<img src='mode1_s'/>我是什么<p/><img src='mode1_b'/>反弹";
  2. 调用Html.fromHtml()方法设置图片

    Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() {
        @Override
        public Drawable getDrawable(String source) {
            //根据资源变量名称获取R资源Id,再根据资源Id获取到Drawable对象
            Drawable drawable = getResources().getDrawable(getResourceId(source));
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
            return drawable;
        }
    }, null);
    

ImageGetter 为处理html中的处理器,生成Drawable对象并返回。

创建ImageGetter 主要实现下面的方法,source为标签中src属性的值。

  1. 反射方法获取图片资源

    public int getResourceId(String name) {
        try {
            //利用Java反射机制获取R资源Id
            Field field = R.drawable.class.getField(name);
            return Integer.parseInt(field.get(null).toString());  //静态字段 get(null)也可以得到值
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        return 0;
    }
    
  2. 设置文本

mTextView.setText(spanned);

就可以看到效果了
效果图

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值