首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android TextView fromHtml()如何支持不支持的css样式、文字大小?

Android的TextView组件提供了一个fromHtml()方法,可以将HTML格式的文本转换为可显示的文本。但是,fromHtml()方法在解析HTML时并不支持所有的CSS样式和文字大小。

要支持不支持的CSS样式,可以使用自定义的Html.TagHandler来处理。Html.TagHandler是一个接口,可以用于处理HTML标签。你可以创建一个实现了Html.TagHandler接口的类,并重写handleTag()方法来处理不支持的CSS样式。

下面是一个示例代码,演示如何支持不支持的CSS样式:

代码语言:txt
复制
public class CustomTagHandler implements Html.TagHandler {
    @Override
    public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
        if (tag.equalsIgnoreCase("span")) {
            handleSpanTag(opening, output);
        }
    }

    private void handleSpanTag(boolean opening, Editable output) {
        int len = output.length();
        if (opening) {
            output.setSpan(new CustomSpan(), len, len, Spannable.SPAN_MARK_MARK);
        } else {
            Object obj = getLast(output, CustomSpan.class);
            int where = output.getSpanStart(obj);
            output.removeSpan(obj);
            if (where != len) {
                output.setSpan(new CustomSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
    }

    private Object getLast(Editable text, Class kind) {
        Object[] spans = text.getSpans(0, text.length(), kind);
        if (spans.length == 0) {
            return null;
        } else {
            for (int i = spans.length; i > 0; i--) {
                if (text.getSpanFlags(spans[i - 1]) == Spannable.SPAN_MARK_MARK) {
                    return spans[i - 1];
                }
            }
            return null;
        }
    }

    private class CustomSpan {}
}

在使用fromHtml()方法时,可以通过传递一个自定义的Html.TagHandler对象来处理不支持的CSS样式。例如:

代码语言:txt
复制
String htmlText = "<span style=\"color: red;\">红色文本</span>";
Spanned spannedText = Html.fromHtml(htmlText, null, new CustomTagHandler());
textView.setText(spannedText);

对于不支持的文字大小,可以使用Html.fromHtml()方法的第二个参数来指定一个Html.ImageGetter对象。Html.ImageGetter是一个接口,可以用于处理HTML中的图片和文字大小。

下面是一个示例代码,演示如何支持不支持的文字大小:

代码语言:txt
复制
public class CustomImageGetter implements Html.ImageGetter {
    private Context context;

    public CustomImageGetter(Context context) {
        this.context = context;
    }

    @Override
    public Drawable getDrawable(String source) {
        // 处理图片
        Drawable drawable = context.getResources().getDrawable(R.drawable.image);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        return drawable;
    }
}

在使用fromHtml()方法时,可以通过传递一个自定义的Html.ImageGetter对象来处理不支持的文字大小。例如:

代码语言:txt
复制
String htmlText = "<font size=\"20\">大号文本</font>";
Spanned spannedText = Html.fromHtml(htmlText, new CustomImageGetter(context), null);
textView.setText(spannedText);

这样,就可以通过自定义的Html.TagHandler和Html.ImageGetter来支持不支持的CSS样式和文字大小。

关于Android TextView的更多信息,你可以参考腾讯云的文档:Android TextView

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android图文混排实现方式详解

2 实现方式 Android官方对TextView图文混排提供了支持,我们可以从以下三种方式实现TextView图文混排: 1.在TextView中使用Compound Drawable属性; 2....在TextView中使用Spannable多样式显示; 3.在TextView中显示HTML文本。...需要注意是,并不是所有的 HTML 标签在 TextView 中都是支持,且官方文档并没有明确说明支持 HTML 标签列表,通过查看 Android 源代码,可以得到简单支持列表。 ?...下面的示例来介绍如何TextView 中显示一段 HTML 内容,要显示这段 HTML 内容即包含超链接内容,也包含有图片。 2.使用 fromHtml方法 ?...为了支持更多标签,例如为了支持和标签,这四个标签是在 formHtml()方法中本身是不支持

2.7K10
  • Android项目实战(十四):TextView显示html样式文字

    项目需求: TextView显示一段文字,格式为:白雪公主(姓名,字数不确定)向您发来了2(消息个数,不确定)条消息 这段文字中名字和数字长度是不确定,还要求名字和数字各自有各自颜色。...一开始我想是用(转) SpannableString与SpannableStringBuilder来实现,因为它可以实现一段文字显示不同颜色 但是貌似它只能固定哪些位置文字显示什么样式,于是乎放弃...看方法名很简单,就是可以显示字符串str对应html格式文本 比如: Html.fromHtml(你好" ) 就将你好以html...(Html.fromHtml(message.get(0))); textView2.setText(Html.fromHtml(message.get(1))); textView3....setText(Html.fromHtml(message.get(2))); } 看下效果图,是不是很简单,只要简单会html 就可实现这种效果 ?

    2.6K80

    项目需求讨论: 文字显示排版— Html格式

    2.是自定义弹框,(自定义弹框用是我自己封装类:项目需求讨论-Android 自定义Dialog实现步骤及封装),我们看到里面的内容会有各种排版,有些是黑色加粗,有些是换行。...if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { result = Html.fromHtml...result; }复制代码 我们在Android 6 及以下,还是使用Html.fromHtml(String);而在Android 7 及以上要用新:Html.fromHtml(String ,...但是我们如果是 textView.setText(Html.fromHtml(message)+"");复制代码 没错,我们把Html.fromHtml(message)和字符串拼接之后,再传给TextView...所以我们如果有需求要拼接字符串,一定要先把要拼接字符串拼接完后,再用Html.fromHtml包裹,然后赋值给TextView

    4.3K20

    TextView实现富文本展示,点击断句和语音播报

    Html.fromHtml() fromHtml重载两个方法,分别是: 1、Spanned android.text.Html.fromHtml(String source) //输入参数为(html...格式文本) 目前android不支持全部html标签,目前只支持与文本显示和段落等标签,对于图片和其他多媒体,还有一些自定义标签不能识别。...2 、Spanned android.text.Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)...,我们完全可以使用Html.fromHtml方法,传入html代码,最后返回Spanned 对象,在使用setText方法既可实现用TextView展示html类型富文本。...在全部图片加载完成后在刷新textview内容(这里setText是稍后会讲到封装设置html代码,大家可简单理解成setText(Html.fromHtml(… )))。

    1.1K10

    Android开发笔记(六)可变字符串

    Andorid文本显示 在androidTextView控件上显示文本使用setText函数,包括继承自TextView其他控件如Button、CheckBox、EditText、RadioButton...SpannableString应用 SpannableString允许对其中一段字串分别设置不同风格,各种风格源码在android源码包里android.text.style居然有三十几个,看来是没法全部掌握了...itemText = "Hello world. " SpannableString spanText = new SpannableString("Hello world. ");   第一段文本改变文字大小采用...第二段文本改变文字大小也采用RelativeSizeSpan,改变颜色采用ForegroundColorSpan,代码如下: spanText.setSpan(new RelativeSizeSpan..."; Spannable sp = (Spannable) Html.fromHtml(""+str_url+""); CharSequence text =

    63940

    AndroidTextView实现分段显示不同颜色字符串

    关于TextView TextViewAndroid开发中最最常见控件之一,在API记录属性有很多,但实际开发中,也遇到很多有趣需求,值得去尝试,所以记录下来,既可以给大家提供参考,同时自己需要时候也方便查找...,颜色样式控制灵活 如果需要显示文本需要分多个段的话,那就需要很多个TextView,而且布局不好控制 实现方式简单,就不写例子了 使用SpannableString 想必用过的人都知道,比较好一点是...tvContent = (TextView) view.findViewById(R.id.tvContent); tvContent.setText(Html.fromHtml(content));...以上就是TextView分段显示不同样式字符串方法,希望对大家有用 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对...ZaLou.Cn支持

    3.8K30

    Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果

    SpannableString 在 Android 开发中是一个非常强大工具,它允许你在单个字符串范围内应用多种样式。...下面是一个详细介绍以及一些常见效果具体代码示例: 基本介绍 SpannableString 是 CharSequence 一个子类,用于在一个字符串上应用一种或多种样式。...常见样式可以通过 What 类实现,如: ForegroundColorSpan:设置文本颜色 BackgroundColorSpan:设置文本背景颜色 StyleSpan:设置文本风格,如粗体,斜体...需要设置movementMethod val textView = findViewById(R.id.textview) textView.text = spannableStringClickable...以上示例展示了如何设置文本颜色,字体样式,添加下划线,设置文字大小和添加点击事件。通过组合这些效果,你可以实现丰富文本展示和交互效果。 END 点赞转发,让精彩不停歇!

    20310

    TextView

    常见标签如下: 名称 描述 设置颜色和字体 ,只支持color和face两个属性 大号字体 小号字体 斜体 粗体 等宽字体(Monospace) 换行(行与行之间没有空行),相当于\n...不能将带有标签字符串直接使用TextView.setText()方法进行设置,需要使用Html.fromHtml()将带有标签字符串转换成CharSequence对象,然后再使用TextView.setText...对象 获得要设置样式子字符串在原字符串中位置和子字符串后面的字符位置,即start和end 创建一个Span对象(所有android.text.style包中XXXSpan类创建对象统称,XXX...在java代码中直接使用Span对象来设置文本样式。...Span对象 在字符串资源中,使用标签(仅支持a标签)设置可点击链接,不要设置android:autoLink属性。

    1.6K20

    Android 开发第四讲 TextView基本使用

    Android 开发第四讲 TextView使用 一丶TextViw 1.1 TextView主要作用 ​ TextView可以进行如下 文字大小,颜色设置,显示文字 显示不下文字时候 使用 .....总结来说.文字显示控件支持属性很多.需要编写Xml进行体会. 1.2 Xml设置Button按钮. java入口设置Button使用 Button后面会说.这里先贴出代码....常用属性写法 TextViewText属性可以指定你要显示名称.可以直接写,也可以引用另一个Xml文件中信息 在Android Studio中 Values下记录这是一些信息....:textColor="#00ff33" android:text="我是不被引用"> <!...setFlags(Paint.UNDERLINE_TEXT_FLAG); //第二种形式使我们可以从html中设置 m_TextViewId6.setText(Html.fromHtml

    84420

    Android入门教程 | TextView简介(宽高、文字、间距)

    之前我们已经知道如何获取到layout中TextView,也知道setText()方法可以修改显示文字。 结合我们实际生活和学习经验,写字时候,有哪些方面是可以由我们来控制?...最简单TextView: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content...dp是安卓中一种单位,通常用来规定控件宽高,间隔距离等等。类似的,表示文字大小单位,安卓里用sp。 显示文字 显示文字,可能是 TextView 最主要用法了。...textColor 设置字体颜色 textSize 设置字体大小 textStyle 设置字体样式 textStyle 设置字体样式 normal 没有特殊效果,默认值 italic 斜体 bold 粗体...字体(字库) 默认情况下,TextView typeface 属性支持 sans、serif和monospace 这三种字体。 系统默认 sans 作为文本显示字体。但这三种字体只支持英文。

    1.3K00

    Android入门教程 | TextView简介(宽高、文字、间距)

    之前我们已经知道如何获取到layout中TextView,也知道setText()方法可以修改显示文字。 结合我们实际生活和学习经验,写字时候,有哪些方面是可以由我们来控制?...dp是安卓中一种单位,通常用来规定控件宽高,间隔距离等等。类似的,表示文字大小单位,安卓里用sp。 显示文字 显示文字,可能是 TextView 最主要用法了。...textColor 设置字体颜色 textSize 设置字体大小 textStyle 设置字体样式 示例: [1240] [1240] textStyle 设置字体样式 normal 没有特殊效果,默认值...字体(字库) 默认情况下,TextView typeface 属性支持 sans、serif和monospace 这三种字体。 系统默认 sans 作为文本显示字体。但这三种字体只支持英文。...这里我们拿 TextView 来看一下。 [1240] 以后想显示一些文字时候,我们首先会想起TextViewAndroid零基础入门教程视频参考

    1.9K20

    使用TypeFace设置TextView文字字体(附源码)

    Android里面设置一个TextView文字颜色和文字大小,都很简单,也是一个常用基本功能。...但很少有设置文字字体,今天要分享是通过TypeFace去设置TextView文字字体,布局里面有两个Button,总共包含两个小功能:换字体和变大。...关于Android字体,有以下两点要注意: 字体文件必须是ttf(True Type Font)格式,否则,即使程序编译时不出错,在运行时也会发生无法更改字体情况 目前Android支持字体文件时还有些问题...,即使用了不支持字体,Android也不会发生错误,而是以默认字体 Droid Sans 替换。...所以大家如果遇到使用外部字体却发现没变化时,问题就出在Android不支持该字体,而非程序错误 本功能里面使用了外部字体,也可以通过调用Typeface静态方法defaultFromStyle,使用原生字体

    2.1K20

    Android程序猿怎么学H5

    css整体来说,主要负责html中样式和动画,这个就比较像是androidstyles.xml + anim中.xml文件。...css中很多样式属性,你都可以根据android猜到个7、8成,比如width,margin-top,color,font-size等等...下面,我们也结合例子中代码看看。...而没有带任何前缀,就是所有这类型标签默认会添加这个css样式。 class class在css中是非常重要。class应该算是一个别名作用。...像例子中,如果我们要把设置文字大小和设置左边距像css中定义成两个的话,就只能通过parent="pwMarginLeft"来实现继承,从而能使用到两个style。...如果你使用类似bootstrap这样css工具框架,你不难发现,他就是基本依靠class来完成各种样式功能调用。 Javascript篇 js-->逻辑处理.java。

    58140

    Android项目实战(十六):QQ空间实现(一)—— 展示说说中评论内容并有相应点击事件

    作为一个android开发者,我们要实现对一个TextView : 1、点击不同文字部分(文字个数还不确定)有相应响应操作(进入个人主页等等) 2、一个TextView中某些文字有不同颜色 下面学习如何实现...-------------------------------------------------------------- 下面用一个Demo来学习如何实现说说评论效果: 首先布局文件,就一个不可滑动...显示html样式文字 浅谈ClickableSpan , 实现TextView文本某一部分文字点击响应 然后~~ 注释都在代码中: @Override public View getView...QQ空间说说列表评论展示介绍完了~~  那么如何 回复评论呢?      ...如何将新评论评论及时显示在当前列表呢?

    2.7K60
    领券