`
zhanglfat
  • 浏览: 91454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android字符串处理(Mms模块短信内容解析)

 
阅读更多
/***
     *
         * 此方法描述的是:   开始转换了哦
         * @author:wujun@cqghong.com,ppwuyi@sohu.com
         * @version: 2010-5-13 下午03:32:52
     */
    private CharSequence formatMessage(String contact, String body, String subject,
                                       String timestamp, String highlight) {
        CharSequence template = mContext.getResources().getText(R.string.name_colon); //遇到鬼了     &lt;主题:<xliff:g id="SUBJECT">%s</xliff:g>&gt;"
        SpannableStringBuilder buf =                   //把他当作StringBuffer只是它可以放的不是 String 而已他能放跟多类型的东西
            new SpannableStringBuilder(TextUtils.replace(template,
                new String[] { "%s" },
                new CharSequence[] { contact })); //替换成联系人
        boolean hasSubject = !TextUtils.isEmpty(subject); //主题
        if (hasSubject) {
            buf.append(mContext.getResources().getString(R.string.inline_subject, subject)); //buff先在是 联系人 主题 XXXX      eg wuyi <主题:dsadasdsa> 我爱我家
        }
        if (!TextUtils.isEmpty(body)) {
            if (hasSubject) {
                buf.append(" - "); //如果内容有主题有就+ " - "    eg wuyi <主题:sdsadsadsa> -
            }
            SmileyParser parser = SmileyParser.getInstance(); //获得表情类了哦
            buf.append(parser.addSmileySpans(body)); //追查 急切关注中
        }
        if (!TextUtils.isEmpty(timestamp)) {
            buf.append("\n");
            int startOffset = buf.length();
            // put a one pixel high spacer line between the message and the time stamp as requested
            // by the spec.
            //把之间的信息和时间戳的要求间隔一个像素的高线
            //由规范
            buf.append("\n");
            buf.setSpan(new AbsoluteSizeSpan(3), startOffset, buf.length(),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            startOffset = buf.length();
            buf.append(timestamp);
            buf.setSpan(new AbsoluteSizeSpan(12), startOffset, buf.length(),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            // Make the timestamp text not as dark 改变某区域颜色   时间的地方为特殊颜色
            int color = mContext.getResources().getColor(R.color.timestamp_color);
            buf.setSpan(new ForegroundColorSpan(color), startOffset, buf.length(),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        if (highlight != null) {
            int highlightLen = highlight.length();
            String s = buf.toString().toLowerCase();
            int prev = 0;
            while (true) {
                int index = s.indexOf(highlight, prev);
                if (index == -1) {
                    break;
                }
                buf.setSpan(new StyleSpan(Typeface.BOLD), index, index + highlightLen, 0);
                prev = index + highlightLen;
            }
        }
        return buf;
    }


**
     * Adds ImageSpans to a CharSequence that replace textual emoticons such
     * as :-) with a graphical version.
     *
     * @param text A CharSequence possibly containing emoticons
     * @return A CharSequence annotated with ImageSpans covering any
     *         recognized emoticons.
     * 添加ImageSpans一个CharSequence的表情符号代替文字等     *如用图形版本:-)。
     * 核心是把表情字符替换成ImageSpans的对象
     */
    public CharSequence addSmileySpans(CharSequence text) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        Matcher matcher = mPattern.matcher(text);
        while (matcher.find()) {
            int resId = mSmileyToRes.get(matcher.group());
            //注意下面的一块有点不好理解哦但是是核心
            builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return builder;
    }
总结:
     android 在将字符转化为表情图像其核心代码为
builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
原理过程是先匹配到表情字符然后通过new ImageSpan(上下文,表情地址)绘制出一个ImageView然后替换掉表情字符。
五、 Android TextView 支持的HTML标签
<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
分享到:
评论

相关推荐

    Android字符串运算的计算器

    在Android平台上,开发一个能处理字符串运算的计算器是一项挑战性的任务。这个计算器应用程序允许用户输入一个完整的数学表达式,如 "2 + 3 * (4 - 5)",然后通过字符串解析和运算来得出结果。以下是一些关于实现...

    android字符串和16进制转换

    在Android开发中,理解和操作字符串以及16进制数值是至关重要的技能,尤其是在处理数据传输、存储或解析二进制数据时。这篇文章将深入探讨如何在Android平台上进行字符串与16进制之间的转换。 首先,我们要明白...

    可读的 Fortran 字符串处理模块

    字符串模块提供了一组用于处理字符串的函数和子例程,使得在 Fortran 中处理字符串变得更加高效和方便。字符串模块通常包括以下几个方面的功能:1. 字符串连接和拆分:提供了函数用于将多个字符串连接成一个字符串,...

    库卡机器人高级字符串处理指令文档

    库卡机器人高级字符串处理指令文档 库卡机器人高级字符串处理指令文档是一份详细的指令文档,旨在提供给库卡机器人用户和开发者,用于了解和掌握高级字符串处理指令的使用方法和技术细节。该文档涵盖了CREAD/CWRITE...

    Android relaceALL替换字符串中的反斜杠

    `replaceAll`函数就是Java(也是Android)中处理字符串替换的一个重要方法。这个方法来自`String`类,允许我们用新的字符串替换掉原字符串中匹配某个模式的所有实例。在这个案例中,我们要关注的是如何替换字符串中...

    纯C++ 字符串处理函数大全源码

    2. `ReplaceAll`:在字符串中查找并替换特定子串,这在需要批量替换某些特定内容时非常方便。 3. `Join`:将一个字符串向量合并为一个单一的字符串,可以指定连接两个字符串的字符。 4. `ToLower`/`ToUpper`:将字符...

    单片机解析字符串命令示例

    总结,STM8S003单片机解析字符串命令涉及到UART通信配置、串行数据接收、字符串处理和命令执行等多个环节。通过理解这些知识点,你可以设计出一个灵活且可扩展的控制系统,实现与外部世界的交互。

    android SAX解析String类型 XML 字符串

    综上所述,通过使用SAX解析String类型的XML字符串,我们可以有效地处理XML数据,同时结合自定义的BaseAdapter,将解析结果展示在ListView上,提供用户友好的交互体验。在实际项目中,可能还需要考虑到错误处理、性能...

    MFC一大串字符串数据的解析.rar

    在处理大量字符串数据时,特别是当这些数据由逗号分隔时,MFC提供了一些有效的工具和方法来解析这样的数据。本文将深入探讨如何在MFC环境中解析一串由逗号隔开的字符串。 首先,我们需要理解MFC中的字符串类型。MFC...

    截取特定部分字符串

    在编程领域,特别是Android和Java开发中,经常需要处理字符串并从中截取特定部分。"截取特定部分字符串"这个话题涉及到字符串操作的基础知识,它包括查找字符串的开始位置、结束位置,然后提取这两个位置之间的子...

    android demo,json数据的处理,json字符串的发送和解析。

    这个“android demo”显然是一个展示如何在Android平台上处理JSON数据、发送JSON字符串以及进行JSON解析的示例项目。下面将详细阐述相关知识点。 一、JSON基础知识 1. JSON格式:JSON采用键值对的形式存储数据,键...

    Android开发之部分字符串可实现超链接点击事件的方法源码

    首先,Android提供了TextView和WebView两种主要方式来处理字符串中的超链接。对于TextView,我们可以通过设置SpannableString和ClickableSpan来实现。以下是一个简单的示例: ```java TextView textView = ...

    STM32串口配置接收字符串解析源码.zip

    这是STM32串口配置接收字符串解析源码,采用寄存器方式编写串口的初始化所有代码。 注释、结构清晰。 MCU型号: ST32F103ZET6 使用的串口是串口1. PA9 PA10 中断和查询方式接收字符串。 接收之后解析完成控制LED灯。

    android 判断字符串是否是日期格式

    在Android开发中,判断一个字符串是否符合日期格式是一项常见的任务,尤其在处理用户输入或者解析数据时。这个任务可以通过多种方式来实现,涉及到日期时间处理、正则表达式以及Java或Android提供的日期解析类。以下...

    java解析xml字符串

    在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这是为了将字符串转换为可以...

    C#字符串计算公式处理

    总的来说,C#字符串计算公式处理涉及字符串操作、变量解析、数值转换和数学运算。通过组合这些技术,我们可以构建出能够处理复杂计算公式的应用程序。在实际开发中,为了确保代码的健壮性和可维护性,还可以考虑引入...

    Android图片Bitmap和字符串String之间的相互转换

    在Android开发中,处理图像数据是一项常见的任务,而Bitmap和String是两个核心的数据类型,分别代表位图图像和文本字符串。Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨...

    解析unicode的json字符串的cJSON,支持宽字符串

    在解析过程中,还需要处理JSON字符串中的Unicode转义序列,如`\u00e9`,这代表了字符'é'。CJSON原本只处理ASCII转义序列,所以我们需要扩展其内部的转义序列解析逻辑,使其能够识别并正确处理Unicode转义。 对于...

    Android_JSON数据解析

    Retrofit是另一种流行的Android网络库,它允许更优雅地处理网络请求和响应,包括JSON解析。添加依赖: ```groovy implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation '...

    自己整理的StringUtil ,字符串处理工具类.txt

    自己整理的StringUtil ,字符串处理工具类,很全面的方法,对象之间的数据转换

Global site tag (gtag.js) - Google Analytics