Android富文本

Stella981
• 阅读 845

采用html方式

Html.from(String html);

Html.fromHtml(
    "<font color=\"red\"><i>Hello</i></font> <u>world</u> ! <diy >test</diy> <img src=\"ic_launcher.png\"/>",
    new ImageGetter() {//图片获取器,用于获取文本对应的图片,可采用任意方式加载,返回drawable即可
        @Override
        public Drawable getDrawable(String source) {
            // TODO Auto-generated method stub
            Drawable drawable = null;
            if ("ic_launcher.png".equals(source)) {
                drawable = getResources().getDrawable(
                        R.drawable.ic_launcher);
                drawable.setBounds(0, 0,
                        drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight());//注意要设置图片大小,不然可能不显示
            }
            return drawable;
        }
    }, new TagHandler() {
        //标签处理器,用于处理特殊标签或者自定义html标签
        private int start;
        private int end;
        @Override
        public void handleTag(boolean opening, String tag,
                Editable output, XMLReader xmlReader) {
            if ("diy".equalsIgnoreCase(tag)) {
                if (opening) {
                    start = output.length();
                } else {
                    end = output.length();
                    Log.d("diy",output.subSequence(start, end).toString());
                }
            }
        }
    });

采用SpannableString方式,有些效果不明显,此处举一例

 TextView tv = new TextView(this);
 SpannableString spannaableStr = new SpannableString("Hello World !");
 spannaableStr.setSpan(new NoLineClickSpan(), 0, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 tv.setText(spannaableStr);
 tv.setMovementMethod(LinkMovementMethod.getInstance());//此处不设置无点击反应
 
private class NoLineClickSpan extends ClickableSpan {
    
    @Override
    public void updateDrawState(TextPaint ds) {
        // TODO Auto-generated method stub
        ds.linkColor = Color.BLUE;//设置超链接的颜色
        ds.setColor(ds.linkColor );
        ds.setUnderlineText(false);//去掉超链接的下划线
    }
    
    @Override
    public void onClick(View widget) {
        // TODO Auto-generated method stub
        Log.d("onClick", "NoLineClickSpan");//点击文本触发的事件
    }
}

附录:

BackgroundColorSpan 背景色 
ClickableSpan 文本可点击,有点击事件
ForegroundColorSpan 文本颜色(前景色)
MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
MetricAffectingSpan 父类,一般不用
RasterizerSpan 光栅效果
StrikethroughSpan 删除线(中划线)
SuggestionSpan 相当于占位符
UnderlineSpan 下划线
AbsoluteSizeSpan 绝对大小(文本字体)
DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
ImageSpan 图片
RelativeSizeSpan 相对大小(文本字体)
ReplacementSpan 父类,一般不用
ScaleXSpan 基于x轴缩放
StyleSpan 字体样式:粗体、斜体等
SubscriptSpan 下标(数学公式会用到)
SuperscriptSpan 上标(数学公式会用到)
TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
TypefaceSpan 文本字体
URLSpan 文本超链接
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
半臻 半臻
3年前
Python基础7——单例模式
15单例模式15.1init和new方法执行步骤1.实例化一个对象,先执行new方法,在new方法中返回对象2.然后再调用init方法15.1.1\\init\\方法init是构造方法<fontcolor"red"其实最先调用的方法是new方法</font,但是大部分情况下是不使用new方法pythonclassTest(object):
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Stella981 Stella981
3年前
Android 从 Web 唤起 APP
前言!(http://7q5c2h.com1.z0.glb.clouddn.com/WebToAPP2.png?watermark/2/text/5ZC05bCP6b6Z5ZCM5a24/font/5qW35L2T/fontsize/500/fill/I0VGRUZFRg/dissolve/100/gravity/SouthEast/dx/
Wesley13 Wesley13
3年前
C++ STL——异常
\TOC\_<fontcolor"red"注:原创不易,转载请务必注明原作者和出处,感谢支持!</font__<fontcolor"red"注:内容来自某培训课程,不一定完全正确!</font_一C异常机制概述什么是异常处理?一句话,异常处理就是处理程序中的错误。为什么需要异
Wesley13 Wesley13
3年前
(前端)html与css,css 6、font
fontweight:字体加粗属性值:数字、单词数字:100,200……700。数字400正常属性,代码↓!(https://oscimg.oschina.net/oscnet/1a7231ba5c8df9847d5c4dddfe6577cc2be.jpg)!(https://oscimg.o
Stella981 Stella981
3年前
Maven镜像源
Maven仓库镜像修改Mavensetting.xml文件在<mirrors标签内添加以下镜像。<fontcolor"red"注意:如果构建错误,请根据错误信息,调整镜像位置</font<mirror<idrepo2</id<mirrorOfcentral</m
Stella981 Stella981
3年前
Django组件——cookie与session
Django组件——cookie与session<fontcolor00bff一、会话跟踪技术</font<fontcolorff7f501、什么是会话跟踪技术</font先了解一下什么是会话。可以把
Wesley13 Wesley13
3年前
IE浏览器动态网页
<html<body  <palign'center'<fontsize"5"color"red"欢迎加入IE浏览器动态网网页!</font</p  <%   ttime()   hhour(t)   Ifh12Then       clr"bl